0

XML と php を使用して製品を並べ替えようとしてい
ます。次のような方法で結果をページに表示したいと考えています。

A) まず、コードはフィールド (Code) に基づいて urisegment に従って XML データを抽出し、segment($id) に従って関連する特定の製品を提供します。

B) 次に、上記の製品を再度表示することなく、同じカテゴリに属する​​すべての製品を同じページに表示できます。

私のクエリ文字列は次のようになります: http://myspec.com/productspec/listings/10004/EDEN%2046cmTROUGH

<?
 $list = groupBy(file_get_contents('XML/output.xml'), "WhatMoreProductSubRange");
 $id=urldecode($this->uri->segment(4)); // URL values for WhatMoreProductSubRange 
 $id2=urldecode($this->uri->segment(3)); // URL values for Code 

 foreach ($list[$id] as $product ) 
 {
  if ($id2==$product->Code)
   {
     $subcat=$product->WhatMoreProductSubRange;

  ?>
      <h1><?=$product->Name?> </h1>
<?
   }
   else { 
?>
      <h2><?=$product->Name?> </h2>
<? 
        }
}

?>
<?
  function groupBy($xml, $categoryName) {
   $xml = new \SimpleXMLElement($xml);
    $category = array();
    foreach ( $xml as $row ) {
     $attr = $row->attributes();

    if (! isset($attr->$categoryName)) {
        trigger_error("$categoryName does not exist in XML");
        break;
    }

    $category[(string) $attr->$categoryName][] = $attr;
  }
  return $category;
}
?>

XML : output.xml

<?xml version="1.0" standalone="yes"?>
<Rows>
<Row Code="1002" Name="EDEN TROUGH  Terracotta Blue" WhatMoreProductRange="Eden"    
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" />
<Row Code="1003" Name="EDEN TROUGH  Terracotta Black" WhatMoreProductRange="Eden"    
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" />
<Row Code="1004" Name="EDEN TROUGH  Terracotta Orange" WhatMoreProductRange="Eden"    
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" />
<Row Code="1005" Name="EDEN TROUGH  Terracotta blue" WhatMoreProductRange="Eden"    
WhatMoreProductSubRange="EDEN 46cmTROUGH" WhatMoreWebCategory="Garden Products" />
</Rows>

このコードは、その WhatMoreProductSubRange に属するすべての製品を出力しますが、製品リスト (パート B で言及) で製品 (パート A で言及) を繰り返したくありません。 xml 解析へ。親切に私を助けてください。

4

1 に答える 1

0

並べ替え。効率は低いですが、これは正常に機能します。

<?
$list = groupBy(file_get_contents('XML/output.xml'), "WhatMoreProductSubRange");
$id=urldecode($this->uri->segment(4));
$id2=$this->uri->segment(3);
foreach ($list[$id] as $product) 
{
if ($id2==$product->Code)
{
$subcat=$product->WhatMoreProductSubRange;
 ?>
 <h1><?=$product->Name?></h1>
 <?
}
}     
?>
<?
 $list = groupBy(file_get_contents('XML/output.xml'), "WhatMoreProductSubRange");
 $id=urldecode($this->uri->segment(4));
 $id2=$this->uri->segment(3);
 foreach ($list[$id] as $product ) 
 {
   if ($id2!=$product->Code)
   {
    $subcat2=$product->WhatMoreProductSubRange;
 ?>
      <h2><?=$product->Name?></h2>
 <?
   }
  } 
  ?>
于 2012-11-02T09:51:58.113 に答える