11

Magentoでは、個々の製品ページのブレッドクラムは、ユーザーがページにアクセスした方法に応じて常に変化しているということです。たとえば、ユーザーがトップカテゴリからサブカテゴリ、そして製品に至るまでクリックした場合、ブレッドクラムは「ホーム>>トップカテゴリ>>サブカテゴリ>>製品」のようになります。

ただし、ユーザーがGoogleクエリなどから直接商品ページにアクセスした場合、ブレッドクラムは単に「ホーム>>商品」になります。そして、このようになるのはクールではありません。

ユーザーがGoogleからページにアクセスした場合でも、ブレッドクラムにカテゴリを追加することで、ユーザーエクスペリエンスが確実に向上します。また、ユーザーはブレッドクラムの親カテゴリをクリックする可能性が高いため、訪問あたりのPVは確実に増加します。

それで、一貫性を保ち、製品ページに常にカテゴリパスを表示する方法はありますか?

私の考えはpage/html / breadcrumbs.phtmlを編集することですが、製品ページでのみパンくずリストにカテゴリを追加する方法がわかりません。

どんな助けでもいただければ幸いです!

======================================

編集:一言で言えば、ユーザーが商品ページにどのようにアクセスしたかに関係なく、商品ページのブレッドクラムにカテゴリを表示したいだけです。カテゴリが存在する限り、どのカテゴリでも構いません。

誰かアイデアがありますか?これは難しいですか?

頭のてっぺんから、ブレッドクラムテンプレートを編集して、カテゴリがない場合はその中にカテゴリを挿入する必要があります。これは製品ページです。しかし、方法がわからないため、そうすることができないようです。これに関連する解決策をどこでも見つけてください...

4

6 に答える 6

16

「app/code / core / Mage / Page / Block / Html /Breadcrumbs.php」の_toHtml()関数をこれに置き換えます。

protected function _toHtml() {             

   $cat_id = "";

   if (Mage::registry('current_product')) {
      $product_id = Mage::registry('current_product')->getId();
      $obj = Mage::getModel('catalog/product');
      $_product = $obj->load($product_id); // Enter your Product Id in $product_id

      if ($product_id) {
         $categoryIds = $_product->getCategoryIds();
         $cat_id = $categoryIds[0];
      }

      $category = Mage::getModel('catalog/category')->load($cat_id);
      $cat_name = $category->getName();
      $cat_url =  $this->getBaseUrl().$category->getUrlPath();
   }

   if (is_array($this->_crumbs)) {
      reset($this->_crumbs);
      $this->_crumbs[key($this->_crumbs)]['first'] = true;
      end($this->_crumbs);
      $this->_crumbs[key($this->_crumbs)]['last'] = true;
   }

   if($cat_id) {
      $this->_crumbs['category'.$cat_id] = array('label'=>$cat_name, 'title'=>'', 'link'=>$cat_url,'first'=>'','last'=>'','readonly'=>'');
      ksort($this->_crumbs);
      $home = $this->_crumbs['home'];
      unset($this->_crumbs['home']);
      array_unshift($this->_crumbs,$home);
   }

   $this->assign('crumbs', $this->_crumbs);
   return parent::_toHtml();
}
于 2012-10-04T12:33:21.237 に答える
3

製品モデルを書き直して、getProductUrlメソッドを変更できます。基本的に、その製品の最初のカテゴリを取得し、製品パスの前にカテゴリパスを追加します。

于 2012-09-25T12:14:15.810 に答える
2

私はあなたが何をしたいのかを完全に理解しています。Magento自身の検索からリンクされた製品でさえ、そのカテゴリのパンくずリストを失うことに気づきました。私はSlayerに同意します。私は、製品ページに対してのみ独自のカスタムブロックを実装します。

次のコードを使用して、製品カテゴリツリーを取得できます。私はこれを(Magento CE 1.7.0.2で)1つのカテゴリ階層しかない製品と複数の製品でテストしました。

:このコードは各カテゴリオブジェクトを配列にロードするため、メモリを大量に消費する可能性があるため、このコードで何らかの作業を行うことをお勧めします。必要な情報だけを連想配列に追加してから、その配列をメイン配列に追加することをお勧めします

$productCategories = array();

// grab the products category id array...we only want one, so grab the first one
$categoryIds = $_product->getCategoryIds();
$categoryId = $categoryIds[0];

// we don't want the root category as the name may not be user friendly
while ($categoryId != Mage::app()->getStore()->getRootCategoryId())
{
    // load the category object and add it to the product categories array
    $currentCategory = Mage::getModel('catalog/category')->load($categoryId);
    $productCategories[] = $currentCategory;
}

// as the categories were added in reverse order we'll need to "unreverse" them
foreach (array_reverse($productCategories) as $category)
{
    echo $category->getName().'/';
}
于 2012-09-25T09:45:16.563 に答える
2

この目的のために、https://github.com/fascinosum/SeoBreadcrumbsのような軽い拡張機能を使用できます。製品が割り当てられている最下位レベルのカテゴリを取得するためのロジックが実装されていることに注意してください。必要に応じて、この動作を簡単に変更できます。

于 2017-08-06T10:45:32.673 に答える
1

app / code / core / Mage / Catalog / Helper / Data.phpを検索し、Data.phpをapp / code / local / Mage / Catalog / Helper /Data.phpにコピーします。関数publicfunctiongetBreadcrumbPath()を検索し、次のコードをに追加します。この機能の開始

    if ($this->getProduct() && !$this->getCategory()) {
       $_categoryIds = $this->getProduct()->getCategoryIds();

       if ($_categoryId = $_categoryIds[0]) {
          $_category = Mage::getModel('catalog/category')-    >load($_categoryId);
          Mage::register('current_category', $_category);
       }

     } 
于 2015-09-22T01:52:26.257 に答える
0

@ jacek_podwysockiは、breadcrumbs.phtmlにスニペットを追加するソリューションを投稿しました。これは機能します。

コードについては、こちらを参照してください:プログラムでMagentoにブレッドクラムパスを追加しますか?

このスニペットをapp/design / frontend / default / template_name / template / page / html/breadcrumbs.phtmlの上部に追加するだけです。

追加されたページ読み込み/PHPレンダリング時間は、microtime()によるとわずか0.05秒です。

于 2012-10-03T02:08:56.490 に答える