2015-10-08 3 views
1

Таким образом, я создал файл sub.phtml, который создает категорию целевые страниц для меня retreaving дочерних категорий категории и отображения их на странице с соответствующим названием, изображения и т.д.Самые низкие цены в категории Magento

тем не менее, я также хотел бы поставить самую низкую цену продукта в этих категориях («от 19.99», например)

Вот мой текущий код:

<?php 
$category = Mage::getSingleton('catalog/layer')->getCurrentCategory(); 
$categories = $category->getCollection() 
     ->addAttributeToSelect(array('name', 'thumbnail')) 
     ->addAttributeToFilter('is_active', 1) 
     ->addIdFilter($category->getChildren()) 

?> 

<?php 
$lowest_product = Mage::getModel('catalog/product')->getCollection() 
    ->setOrder('price', 'asc') 
    ->setPageSize(1) // just select one product, which will be the cheapest 
    ->setCurPage(1) 
    ->joinField(
     'category_id', 'catalog/category_product', 'category_id', 
     'product_id = entity_id', null, 'left' 
    ) // add a join so you can filter by category id 
    ->addAttributeToSelect('*') 
    ->addAttributeToFilter('category_id', $category->getId()) 
    ->addAttributeToFilter('status', 1) // only select active products 
    ->addAttributeToFilter(array(array('attribute'=>'visibility', 'eq'=>"4"))) // only products which are visible 
    ->getFirstItem(); // only get the first item 
?> 
<div class="container"> 
    <?php foreach ($categories as $category): ?> 
    <a class="catA" href="<?php echo $category->getUrl() ?>"> 
     <div class="catBox"> 
      <div class="catBoxImage"><img src="<?php echo Mage::getBaseUrl('media') . 'catalog' . DS . 'category' . DS . $category->getThumbnail() ?>" alt="<?php echo $this->htmlEscape($category->getName()) ?>"></div> 
      <div class="catBoxText"> 
       <h2><?php echo $category->getName() ?></h2> 
       <p class="catP">From: <span class="red"><?php echo Mage::helper('core')->currency(Mage::helper('tax')->getPrice($lowest_product, $lowest_product->getPrice()), true, false) ?></span></p> 
      </div> 
     </div> 
    </a> 
    <?php endforeach; ?> 
</div> 

Спасибо за помощь заранее.

+0

Вы пытаетесь получить самый дешевый продукт в пределах категории или самой низкой цены каждого продукта? – Karl

+0

К сожалению, самый дешевый продукт в категории –

ответ

1

Чтобы получить самые низкие цены на продукт в пределах категории вы можете сделать следующее:

$lowest_product = Mage::getModel('catalog/product')->getCollection() 
    ->setOrder('price', 'asc') 
    ->setPageSize(1) // just select one product, which will be the cheapest 
    ->setCurPage(1) 
    ->joinField(
     'category_id', 'catalog/category_product', 'category_id', 
     'product_id = entity_id', null, 'left' 
    ) // add a join so you can filter by category id 
    ->addAttributeToSelect('*') 
    ->addStoreFilter(Mage::app()->getStore()->getId()) 
    ->addAttributeToFilter('category_id', $category->getId()) 
    ->addAttributeToFilter('status', 1) // only select active products 
    ->addAttributeToFilter(array(array('attribute'=>'visibility', 'eq'=>"4"))) // only products which are visible 
    ->getFirstItem(); // only get the first item 

Теперь вы можете позвонить:

<?php echo Mage::helper('core')->currency(Mage::helper('tax')->getPrice($lowest_product, $lowest_product->getPrice()), true, false) ?> 

ОБНОВЛЕНО

<?php 
$category = Mage::getSingleton('catalog/layer')->getCurrentCategory(); 
$categories = $category->getCollection() 
     ->addAttributeToSelect(array('name', 'thumbnail')) 
     ->addAttributeToFilter('is_active', 1) 
     ->addIdFilter($category->getChildren()) 

?> 


<div class="container"> 
<?php foreach ($categories as $category): ?> 
<?php 
    $lowest_product = Mage::getModel('catalog/product')->getCollection() 
    ->setOrder('price', 'asc') 
    ->setPageSize(1) // just select one product, which will be the cheapest 
    ->setCurPage(1) 
    ->joinField(
     'category_id', 'catalog/category_product', 'category_id', 
     'product_id = entity_id', null, 'left' 
    ) // add a join so you can filter by category id 
    ->addAttributeToSelect('*') 
    ->addStoreFilter(Mage::app()->getStore()->getId()) 
    ->addAttributeToFilter('category_id', array('in' => $category->getId())) 
    ->addAttributeToFilter('status', 1) // only select active products 
    ->addAttributeToFilter(array(array('attribute'=>'visibility', 'eq'=>"4"))) // only products which are visible 
    ->getFirstItem(); // only get the first item 
?> 

<a class="catA" href="<?php echo $category->getUrl() ?>"> 
    <div class="catBox"> 
     <div class="catBoxImage"><img src="<?php echo Mage::getBaseUrl('media') . 'catalog' . DS . 'category' . DS . $category->getThumbnail() ?>" alt="<?php echo $this->htmlEscape($category->getName()) ?>"></div> 
     <div class="catBoxText"> 
      <h2><?php echo $category->getName() ?></h2> 
      <p class="catP">From: <span class="red"><?php echo Mage::helper('core')->currency(Mage::helper('tax')->getPrice($lowest_product, $lowest_product->getPrice()), true, false) ?></span></p> 
     </div> 
    </div> 
</a> 
<?php endforeach; ?> 

+0

Хмм, похоже, не получается заставить его работать, я довольно беден с PHP, хотя, возможно, что-то неправильно сделал –

+0

Это потому, что это коллекция, поэтому в настоящее время для нее требуется foreach, я буду исправьте мой ответ с помощью рабочего исправления. – Karl

+0

Обновленный ответ. – Karl