2011-12-15 2 views
0

У меня есть сайт Magento, в котором продаются подписки на журнал, около 1000 различных титров. Я хотел бы создать очень простое выпадающее меню, предварительно заполненное все товары на главной странице. Очень похоже на this, только я не могу заменить «производство» на «имя» (название продукта).Выпадающая группа в Magento Frontpage, отображающая все товары

Пример: here с другим сайтом, продающим подписки на журналы (справа вверху, слева до поля поиска).

Может ли кто-нибудь представить нам некоторый код для создания такого выпадающего списка?

ответ

0

Глядя на другом сайте вы связаны, выпадающий HTML выглядит следующим образом, с небольшим фрагментом JavaScript внутри onselect атрибута, чтобы перейти к URL выбранного продукта:

<select ... onchange="window.location.href = this.value"> 
    <option>Select a product</option> 
    <option value="/path-to-foo">Foo</option> 
    <option value="/path-to-bar">Bar</option> 
</select> 

JavaScript плавает установив window.location.href на новый URL-адрес, и он получает этот URL от this.value, который является значением выбранного <option>.

Чтобы сделать снимок, подобный этому в Magento, вам сначала нужно получить все продукты, используя Mike Bywaters' code (отфильтрованные через видимые и еще много чего). Затем вы Переберите все продукты, и вы echo в <option> тег для каждого продукта с правильным значением:

echo "<option value=\"/" . $product->getUrlPath() . "\">"; 
echo $product->getName(); 
echo "</option>"; 

If $product является результатом вызова Mage::getModel(...) то вызов $product->getUrlPath() должен возвращать путь продукта , as documented here.

+0

Спасибо, это работает как прелесть. хотели бы упорядочить все названия (продукты) в алфавитном порядке. Теперь они упорядочены по порядку их идентификаторов. – Tijdschriftenzo

0

Попробуйте поместить это в файл шаблона, где вы хотите выпадающий:

<select> 
    <?php 
     $products = Mage::getResourceModel('catalog/product_collection') 
      ->setStore(Mage::app()->getStore()->getId()) 
      ->addAttributeToFilter('status', array('eq' => '1')) 
      ->addAttributeToFilter('type_id', array('eq' => 'simple')); 
     foreach ($products as $prod_model) { 
      $product = Mage::getModel('catalog/product')->load($prod_model->getId()); 
      echo "<option value=\"".$product->getId()."\">".$product->getName()."</option>"; 
     } 
    ?> 
</select> 

Это будет только активные простые продукты, но вы можете добавить дополнительные фильтры в зависимости от продукта значений атрибутов с -> addAttributeToFilter ().

EDIT: Кроме того, потребуется много времени для обработки, если у вас много продуктов, и особенно долго, если у вас нет кэширования. Это не рекомендуется.

+0

Спасибо! .... но вы правы, им требуется много времени, чтобы загрузить их всех. Но при включении кеширования он работает довольно хорошо. Осталось несколько вещей: 1. В нем также будут показаны невидимые продукты. Я добавил, но не выполнял эту работу: -> addAttributeToFilter ('видимость', массив ('eq' => 'Каталог, поиск')) 2. при выборе продукта он не будет направлять вас на Это. (он просто показывает имена сейчас) 3. как поместить первый выбор с текстом, например «выбрать заголовок». – Tijdschriftenzo

+0

@Mike, я рекомендую вам посмотреть на источник ['Mage_Catalog_Model_Layer # prepareProductCollection()'] (http://docs.magentocommerce.com/Mage_Catalog/Mage_Catalog_Model_Layer.html#prepareProductCollection), который отвечает за «нормальное» ощущение списки продуктов, такие как этот маленький драгоценный камень, «Mage :: getSingleton (« catalog/product_status ») -> addVisibleFilterToCollection ($ collection);' – clockworkgeek

+0

от верхней части головы, «видимость» может быть установлена ​​на 0, 1, 2 или 3. Если вы хотите, чтобы это спустилось, чтобы что-то сделать, вам нужно прикрепить к нему JavaScript.Если вы хотите поместить пустой параметр, добавьте после первого тега select, перед PHP –

Смежные вопросы