getResources Tplナシの出力、なぜか<pre>Array ( [id] => '..... )</pre> をすべて文字列で返してくる(しかも改行やインデントまできっちりと)ので、ReplaceだのEplodeだのでえらく長くなってしまいました(汗)加えて自分がデザイナー上がりなので、多分かなり力技な書き方になってしまっているのだとは思います。
コード: 全て選択
<?
//リソースの取りだし
$grparam = array('parents'=>$parents,'limit'=>99,'includeTVs'=>1);
$stockstr = $modx->runSnippet('getResources', $grparam);
//文字列→配列変換
$stockstr = str_replace('</pre>', '', str_replace("<pre>\nArray\n(", '', $stockstr));
$stockarrtmp = explode(')', $stockstr);
$stockarr = array();
foreach ($stockarrtmp as $value){
$valtmp = str_replace('[id] => ', '', substr($value, strpos($value, '[id]')));
$id = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[pagetitle] => ', '', substr($valtmp, strpos($valtmp, '[pagetitle]')));
$pagetitle = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[longtitle] => ', '', substr($valtmp, strpos($valtmp, '[longtitle]')));
$longtitle = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[menuindex] => ', '', substr($valtmp, strpos($valtmp, '[menuindex]')));
$menuindex = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[menutitle] => ', '', substr($valtmp, strpos($valtmp, '[menutitle]')));
$menutitle = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[tv.price] => ', '', substr($valtmp, strpos($valtmp, '[tv.price]')));
$price = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[tv.height] => ', '', substr($valtmp, strpos($valtmp, '[tv.height]')));
$height = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[tv.width] => ', '', substr($valtmp, strpos($valtmp, '[tv.width]')));
$width = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
$valtmp = str_replace('[tv.tall] => ', '', substr($valtmp, strpos($valtmp, '[tv.tall]')));
$tall = str_replace(" ", '', str_replace("\n", '', substr($valtmp, 0, strpos($valtmp, '['))));
//pagetiltle: 商品名 longtitle: ブランド名
$stockarr[] = array(
'id' => $id,
'pagetitle' => $pagetitle,
'longtitle' => $longtitle,
'menuindex' => $menuindex,
'menutitle' => $menutitle,
'price' => $price,
'height' => $height,
'width' => $width,
'tall' => $tall);
}
array_shift($stockarr);
//配列のソート
$pagetitle = array();
$longtitle = array();
$price = array();
$height = array();
$width = array();
$tall = array();
//ソート用配列の準備
foreach($stockarr as $key => $row){
$pagetitle[$key] = $row['pagetitle'];
$longtitle[$key] = $row['longtitle'];
$price[$key] = $row['price'];
$height[$key] = $row['height'];
$width[$key] = $row['width'];
$tall[$key] = $row['tall'];
}
$sortby = htmlentities(strip_tags($_GET['sort']));
$sortdir = htmlentities(strip_tags($_GET['dir']));
switch($sortby){
case "brand":
if($sortdir == 'desc'){
array_multisort($longtitle, SORT_DESC,
$pagetitle, SORT_DESC $stockarr);
}else{
array_multisort($longtitle, SORT_ASC,
$pagetitle, SORT_ASC, $stockarr);
}
break;
case "price":
if($sortdir == 'desc'){
array_multisort$price, SORT_DESC,
$pagetitle, SORT_ASC,
$longtitle, SORT_ASC, $stockarr);
}else{
array_multisort($price, SORT_ASC,
$pagetitle, SORT_ASC,
$longtitle, SORT_ASC, $stockarr);
}
break;
case "size":
if($sortdir == 'desc'){
array_multisort($width, SORT_DESC,
$height, SORT_DESC,
$tall, SORT_DESC,
$longtitle, SORT_ASC,
$pagetitle, SORT_ASC, $stockarr);
}else{
array_multisort($width, SORT_ASC,
$height, SORT_ASC,
$tall, SORT_ASC,
$longtitle, SORT_ASC,
$pagetitle, SORT_ASC, $stockarr);
}
break;
default:
if($sortdir == 'desc'){
array_multisort($pagetitle, SORT_DESC,
$longtitle, SORT_DESC $stockarr);
}else{
array_multisort($pagetitle, SORT_ASC,
$longtitle, SORT_ASC, $stockarr);
}
break;
}
//配列の表示
$output = '';
foreach($stockarr as $key => $row){
//プレースホルダーの作成
$modx->setPlaceholder('id',$row['id']);
$modx->setPlaceholder('pagetitle',$row['pagetitle']);
$modx->setPlaceholder('longtitle',$row['longtitle']);
$modx->setPlaceholder('menuindex',$row['menuindex']);
$modx->setPlaceholder('menutitle',$row['menutitle']);
$modx->setPlaceholder('price',$row['price']);
$modx->setPlaceholder('height',$row['height']);
$modx->setPlaceholder('width',$row['width']);
$modx->setPlaceholder('tall',$row['tall']);
$output .= $modx->getChunk($tpl);
}
return $output;
?>