Magento 1.4 - отображение некоторых товаров в определенной категории - PullRequest
0 голосов
/ 11 ноября 2010

Привет Я назначил 20 продуктов в категорию «Телефон». Я хотел бы создать модуль для извлечения этих продуктов и отображения в виде списка. Может кто-нибудь сказать мне, как это сделать?

спасибо

Ответы [ 3 ]

1 голос
/ 14 ноября 2010

Чтобы создать виджет (который вы можете вставить с помощью cms), который использует категорию, чтобы сделать что-то, начните с создания стандартной структуры модуля с: / Block / etc / Helper / Model

Обратите внимание, что вМои примеры кода и имена файлов ниже вам нужно заменить [Пространство имен], [Модуль] и [модуль] на соответствующее пространство имен и модуль, который вы хотите использовать.Дело важно!

Начните с создания приложения / кода / локального / [пространства имен] / [модуля] /etc/config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <[Namespace]_[Module]>
      <version>0.0.1</version>
    </[Namespace]_[Module]>
  </modules>
  <global>
    <helpers>
      <[module]>
        <class>[Namespace]_[Module]_Helper</class>
      </[module]>
    </helpers>
    <blocks>
      <[module]>
        <class>[Namespace]_[Module]_Block</class>
      </[module]>
    </blocks>
    <models>
      <[module]>
        <class>[Namespace]_[Module]_Model</class>
      </[module]>   
    </models>
  </global>
</config>

Затем создайте приложение / код / ​​локального /[Пространство имен] / [Модуль] /etc/widget.xml Этот виджет содержит параметр с именем «selected_category»

<?xml version="1.0"?>
<widgets>
  <[module]_category type="[module]/category">
    <name>[Module]: Category</name>
    <description type="desc">Adds a [module] for a category.</description>
    <parameters>
      <selected_category>
        <label>Categories</label>
        <visible>1</visible>
        <required>1</required>
        <type>select</type>
        <source_model>[module]/catopt</source_model>
      </selected_category>
    </parameters>
  </[module]_category>
</widgets>

Затем обязательный вспомогательный файл в приложении / code / local / [Пространство имен] / [Модуль]/Helper/Data.php

 <?php
    class [Namespace]_[Module]_Helper_Data extends Mage_Core_Helper_Abstract
    {
    }

Затем модель, позволяющая пользователю выбрать категорию в диалоговом окне виджета.Это идет в app / code / local / [Namespace] / [Module] /Model/Catopt.php

<?php
class [Namespace]_[Module]_Model_Catopt
{
    public function toOptionArray()
    {
        $category = Mage::getModel('catalog/category'); 
        $tree = $category->getTreeModel(); 
        $tree->load();
        $ids = $tree->getCollection()->getAllIds(); 
        $arr = array();
        if ($ids){ 
          foreach ($ids as $id){ 
            $cat = Mage::getModel('catalog/category'); 
            $cat->load($id); 
            array_push($arr, array('value' => $id, 'label' => $cat->getName().' ('.$cat->getProductCount().')')); 
          } 
        }
        uasort($arr, array($this, 'labelsort'));
        return $arr;
    }

    function labelsort($a, $b){
      if ( $a['label'] == $b['label'] ) 
                  return 0; 
              else if ( $a['label'] < $b['label'] ) 
                  return -1; 
              else 
                  return 1;
    }
}

Наконец, на стороне модуля есть блок, который идет в app / code / local / [Пространство имен] / [Модуль] /Block/Category.php В этом блоке используется собственный файл .phtml для его отображения, но вы можете изменить его, чтобы использовать все, что вам может потребоваться показать, изменив тип блока и ввод в setTemplate.

<?php
class [Namespace]_[Module]_Block_Category
    extends Mage_Core_Block_Template
    implements Mage_Widget_Block_Interface
{

        /**
         * A model to serialize attributes
         * @var Varien_Object
         */
        protected $_serializer = null;

        /**
         * Initialization
         */
        protected function _construct()
        {
            $this->_serializer = new Varien_Object();
            $this->setTemplate('[module]/[module].phtml');
            parent::_construct();
        }

        public function getCategory(){
          return $this->getData('selected_category');
        }
}

Не забудьте добавить установочный файл модуля в /app/etc/modules/[Namespace]_[Mo]].xml вот так

<?xml version="1.0"?>
<config>
    <modules>
        <[Namespace]_[Module]>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Cms />
            </depends>
        </[Namespace]_[Module]>
    </modules>
</config>

Наконец, вам нужносоздайте файл шаблона для отображения содержимого блока.Это будет идти в /app/design/frontend/default/default/template/[module]/[module].phtml

Этот файл .phtml может использовать $ this-> getCategory () для получения категории ииди оттуда.Вы можете легко настроить блок, включенный в эти примеры, для отображения сеток списков продуктов magento по умолчанию вместо использования настраиваемого файла .phtml.

1 голос
/ 11 ноября 2010

Нет необходимости создавать модуль. просто поместите это в блок в вашем макете: он покажет все продукты, связанные с указанной категорией (id = XXX).

<!-- Show all products linked to this category -->
<block type="catalog/product_list" name="best_sellers" template="catalog/product/list.phtml">
    <action method="setCategoryId">
        <category_id>XXX</category_id>
    </action>
</block>

Обновление:

Вы можете создать модуль, который переопределяет «Mage_Catalog_Block_Product_List», и добавить метод для ограничения определенного количества продуктов.

1- Создайте «app / code / local / [Namespace] /Catalog/etc/config.xml» и вставьте в него:

<config>
    <modules>
        <[Namespace]_Catalog>
            <version>0.1.0</version>
        </[Namespace]_Catalog>
    </modules>

    <global>

        <blocks>
            <catalog>
                <rewrite>
                    <product_list>[Namespace]_Catalog_Block_Product_List</product_list>
                </rewrite>
            </catalog>
        </blocks>

    </global>
</config>

2 - Переопределить блок, создав класс: «app / code / local / [Namespace] /Catalog/Block/Product/List.php»

class [Namespace]_Catalog_Block_Product_List extends Mage_Catalog_Block_Product_List
{
    /**
     * Default number of product to show.
     *
     * @var int default = 5
     */
    private $_productCount = 5;

    /**
     * Initialize the number of product to show.
     *
     * @param int $count
     * @return Mage_Catalog_Block_Product_List
     */
    public function setProductCount($count)
    {
        $this->_productCount = intval($count);

        return $this;
    }


    /**
     * Get the number of product to show.
     *
     * @return int
     */
    public function getProductCount()
    {
        return $this->_productCount;
    }
}

3 - Переместите свою тему, чтобы добавить функцию ограничения продуктов:

скопировать "app / design / frontend / default / default / template / catalog / product / list.phtml" в "app / design / frontend / default / [your_theme] /template/catalog/product/list.phtml"

// Insert between the foreachs and <li> for the list mode and grid mode
<?php if($_iterator < $this->getProductCount()) : ?>
...
// Insert between the foreachs and <li> for the list mode and grid mode
<?php endif; ?>

4- На вкладке содержимого домашней страницы добавьте эту строку там, где вы хотите:

// category_id = Procucts linked to this category
// product_count = Maximum number of product
{{block type="catalog/product_list" category_id="7" product_count="3" template="catalog/product/list.phtml"}}

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 17 декабря 2012

Спасибо за информативный пост. Для тех из вас, кто не очень хорошо владеет PHP, но попал на эту страницу, потому что вы искали решение для отображения списка названий продуктов из данной категории, мне удалось найти решение, просто изменив чужой файл шаблона. Для этого решения я нашел наиболее подходящее расширение:

http://www.cubewebsites.com/blog/magento/extensions/freebie-magento-featured-products-widget-version-2/

(найдите последнюю версию на github: https://github.com/cubewebsites/Cube-Category-Featured-Products/tags).

После входа и выхода из системы и очистки кэша я смог вставить виджет в статический блок и изменить файл .phtml, используемый для создания нужного мне представления.

Виджет при вставке выглядел следующим образом:

{{widget type="categoryfeatured/list" template="categoryfeatured/block.phtml" categories="118" num_products="10" products_per_row="1" product_type="all"}}. 

Я просто открыл

app / design / frontend / base / default / template / categoryfeatured / block.phtml

скопировал его содержимое и создал новый файл .phtml с именем category_product_listing.phtml

и затем указал экземпляр виджета на новый файл .phtml следующим образом:

{{widget type="categoryfeatured/list" template="categoryfeatured/category_product_listing.phtml" categories="118" num_products="10" products_per_row="1" product_type="all"}}. 

Затем я просмотрел этот файл .phtml с моим базовым пониманием PHP и удалял все элементы, такие как изображения, кнопки добавления в корзину, обзоры и т. Д., Пока у меня не осталось только основного связанного названия продукта, а также названия категории осталось нетронутым.

Надеюсь, это кому-нибудь поможет, поскольку я часами пытался это выяснить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...