我正在尝试在自定义类别页面上显示可配置的样本(magento 1.9)

时间:2015-02-10 23:40:19

标签: php magento magento-1.9 magento-1.9.1

我正在使用Magento 1.9.1.0,并且可以在类别和产品视图页面上使用可配置的样本。

我试图创建一个自定义' Shop'列出所有产品的页面(商店只有+/- 20),显示产品下方的可配置样本。

我能够创建Shop页面,其中列出了所有产品的多种方式..通过CMS,local.xml或使用控制器等......没有问题。

这是local.xml示例。 *我有适当的路线设置,默认类别设置为" Is Anchor"。

<mystore_site_index_shop>
    <reference name="content">
            <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
                <block type="core/text_list" name="product_list.name.after" as="name.after" />
                <block type="core/text_list" name="product_list.after" as="after" />
                <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
                    <block type="page/html_pager" name="product_list_toolbar_pager"/>
                </block>
            </block>
    </reference>
</mystore_site_index_shop>

我还在configurableswatches.xml

中添加了页面的页面引用
<mystore_site_index_shop>
    <update handle="product_list"/>
</mystore_site_index_shop>

将相应的.js文件加载到页面中......但是没有显示样本。

有人对我如何做到这一点有任何建议吗?我必须在这里遗漏一些明显的东西..

谢谢!

4 个答案:

答案 0 :(得分:1)

如果你去app / code / core / Mage / ConfigurableSwatches / etc / config.xml 您将在第83行的catalog_block_product_list_collection事件中看到观察者。

  <catalog_block_product_list_collection>
                <observers>
                    <configurableswatches>
                        <class>configurableswatches/observer</class>
                        <method>productListCollectionLoadAfter</method>
                    </configurableswatches>
                </observers>
            </catalog_block_product_list_collection>
如果您对此代码发表评论,则不会在产品详情页面上看到色板。

在事件上添加观察者方法以添加样本。

我希望这会有所帮助。

答案 1 :(得分:1)

在列表页面上添加样本以各种方式完成

我将为您提供方法。

方法1: 您可以免费使用此模块,也可以通过学习模块

来学习

http://magebug.blogspot.in/2013/06/magento-how-to-display-color-options-in.html

Methos 2: [这将显示可配置产品的所有选项]

<?php if($_product->isConfigurable()): ?>
  //get attributes
  <?php $attributes = $_product->getTypeInstance(true)->getConfigurableAttributes($_product) ?>
  <?php if(count($attributes)): ?>
    <ul>
    <?php foreach($attributes as $att): ?>
      <?php $pAtt=$att->getProductAttribute();
        //get the child products
        $allProducts = $_product->getTypeInstance(true)->getUsedProducts(null, $_product);
        $frontValues =array() ?>
      <li><?php echo $pAtt->getFrontendLabel() ?>
       <ul>
       <?php foreach($allProducts as $p): ?>
         //check stock, status, ...
         //do not show unsaleable options
         <?php if(!$p->isSaleable()) continue; ?>
         <?php $out=$p->getAttributeText($pAtt->getName()); ?>
         <?php $frontValues[$out]=$out; ?>
       <?php endforeach ?>
        <li><?php echo implode('</li><li>', $frontValues) ?></li>
       </ul>
      </li>
    <?php endforeach ?>
    </ul>
  <?php endif ?>
<?php endif ?>

您可以按图片或标签替换下拉列表。

希望这对你有用。

答案 2 :(得分:1)

尝试在mystore_site_index_shop块之后添加local.xml文件中的产品列表更新。

在local.xml中

<mystore_site_index_shop>
   <update handle="product_list"/>
</mystore_site_index_shop>

- 编辑 -

尽管我能够使用上面发布的方法来实现这一点。根据我的理解,正确的方法是将您的整个主题构建为rwd主题的子项,允许您在没有任何黑客的情况下使用样本。

在app / design / frontend / YOURTHEME / default / etc / theme.xml

<?xml version="1.0"?>
<theme>
<parent>rwd/default</parent>
</theme>

答案 3 :(得分:0)

如果您查看Mage_ConfigurableSwatches_Model_Observer,您有

  public function convertLayerBlock(Varien_Event_Observer $observer)
{
    $front = Mage::app()->getRequest()->getRouteName();
    $controller = Mage::app()->getRequest()->getControllerName();
    $action = Mage::app()->getRequest()->getActionName();

    // Perform this operation if we're on a category view page or search results page
    if (($front == 'catalog' && $controller == 'category' && $action == 'view')
        || ($front == 'catalogsearch' && $controller == 'result' && $action == 'index')) {

        // Block name for layered navigation differs depending on which Magento edition we're in
        $blockName = 'catalog.leftnav';
        if (Mage::getEdition() == Mage::EDITION_ENTERPRISE) {
            $blockName = ($front == 'catalogsearch') ? 'enterprisesearch.leftnav' : 'enterprisecatalog.leftnav';
        } elseif ($front == 'catalogsearch') {
            $blockName = 'catalogsearch.leftnav';
        }
        Mage::helper('configurableswatches/productlist')->convertLayerBlock($blockName);
    }
}

如您所见,条件需要您的路线($ front,$ controller,$ action)来处理。您可以通过重写覆盖此观察者并添加条件。