0

バックエンドのカスタム属性に基づいてトップメニュー リンク テキストを変更できるカスタム モジュールを作成しました。

モジュールは Magento CE 1.7.02 でテストされ、100% 動作します。現在、Magento EE 1.12.02 でテストしていますが、メニューが書き換えられた Topmenu クラスを認識していません (そのままで、ファイルからすべてを削除したり、XML でクラス名のスペルを間違えたりしても、エラーは発生しません) 、サイトは正常に読み込まれます)。

Enterprise Edition は Community Edition とは別の場所からこのメニューを取得するようですが、その場所が見つかりません。

私の構成XMLの関連部分は次のとおりです。

<blocks>
    <page>
        <rewrite>
            <html_topmenu>WorldSynergy_Seoadditions_Block_Html_Topmenu</html_topmenu>
        </rewrite>
    </page>
</blocks>

Topmenu.php クラスは次のとおりです。

class WorldSynergy_Seoadditions_Block_Html_Topmenu extends Mage_Page_Block_Html_Topmenu
{

    /**
 * Recursively generates top menu html from data that is specified in $menuTree
 *
 * @param Varien_Data_Tree_Node $menuTree
 * @param string $childrenWrapClass
 * @return string
 */
protected function _getHtml(Varien_Data_Tree_Node $menuTree, $childrenWrapClass)
{
    $html = '';

    $children = $menuTree->getChildren();
    $parentLevel = $menuTree->getLevel();
    $childLevel = is_null($parentLevel) ? 0 : $parentLevel + 1;

    $counter = 1;
    $childrenCount = $children->count();

    $parentPositionClass = $menuTree->getPositionClass();
    $itemPositionClassPrefix = $parentPositionClass ? $parentPositionClass . '-' : 'nav-';

    foreach ($children as $child) {

        $child->setLevel($childLevel);
        $child->setIsFirst($counter == 1);
        $child->setIsLast($counter == $childrenCount);
        $child->setPositionClass($itemPositionClassPrefix . $counter);

        $outermostClassCode = '';
        $outermostClass = $menuTree->getOutermostClass();

        if ($childLevel == 0 && $outermostClass) {
            $outermostClassCode = ' class="' . $outermostClass . '" ';
            $child->setClass($outermostClass);
        }

        $childId = explode( "-" , $child->getId() );
        $childId = $childId[2];

        $attrs = Mage::getModel("catalog/category")->getAttributes();
        $altName = $attrs['ws_menutitle']->getFrontEnd()->getValue( Mage::getModel("catalog/category")->load( $childId ) );

        if( empty($altName) ){ $altName = $child->getName(); }

        $html .= '<li ' . $this->_getRenderedMenuItemAttributes($child) . '>';
        $html .= '<a href="' . $child->getUrl() . '" ' . $outermostClassCode . '><span>ABC'
            . $this->escapeHtml($altName) . '</span></a>';

        if ($child->hasChildren()) {
            if (!empty($childrenWrapClass)) {
                $html .= '<div class="' . $childrenWrapClass . '">';
            }
            $html .= '<ul class="level' . $childLevel . '">';
            $html .= $this->_getHtml($child, $childrenWrapClass);
            $html .= '</ul>';

            if (!empty($childrenWrapClass)) {
                $html .= '</div>';
            }
        }
        $html .= '</li>';

        $counter++;
    }

    return $html;
}
}
4

1 に答える 1

0

私は 1.11.1.0 を使用していますが、まったく同じことが起こっていると思います。

を見ると、ブロックに CEのブロックがないapp/design/frontend/base/default/layout/page.xmlことがわかります。top.menupage/html_topmenu

<block type="core/text_list" name="top.menu" as="topMenu" translate="label">
    <label>Navigation Bar</label>
</block>

次に、app/design/frontend/base/default/layout/catalog.xmlカタログ ナビゲーション ブロックをブロックに挿入しますtop.menu

<reference name="top.menu">
    <block type="catalog/navigation" name="catalog.topnav" template="catalog/navigation/top.phtml"/>
</reference>

app/design/frontend/base彼らがこれらすべてをではなくで行ったのは奇妙ですapp/design/frontend/enterprise

于 2012-08-07T20:06:19.847 に答える