Шаблон magento для блока с 2 столбцами
Я сделал небольшой шаблонный файл magento (1.7), в котором отображаются все товары в категории. Однако они отображаются только в одном столбце. Я хотел бы отобразить в 2 столбцах.
Это выполняет блок с первой страницы:
{{block type="catalog/product" name="msc.specials" template="mylib/featuredlist.phtml"}}
Это featuredlist.phtml -
<?php
//$_categoryId = $this->getCategoryId();
$productCollection = Mage::getModel('catalog/category')->load(4)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4)
->setOrder('price', 'ASC');
$cartHelper = Mage::helper('checkout/cart');
?>
<div class='block block-list'>
<div class='block-title'><strong><span><?php echo $this->__('SPECIALS') ?></span></strong></div>
<div class='block-content'>
<ul>
<h2><?php echo $this->__( $this->getLabel() ); ?></h2>
<?php foreach ($productCollection as $product): ?>
<div class="item">
<a class="product-image" href="<?php echo $product->getProductUrl() ?>">
<img src="<?php echo $this->helper('catalog/image')->init($product, 'small_image')->resize(100); ?>" alt="<?php echo $this->htmlEscape($this->getImageLabel($product, 'small_image')) ?>" />
</a>
<a class="product-name" href="<?php echo $product->getProductUrl() ?>"><?php echo $this->htmlEscape($product->getName()) ?></a>
<?php echo $this->getPriceHtml($product, true) ?>
</div>
<div class="cms-price-box" style=" text-align:center;"></div>
<div class="button-row" style="text-align:center;">
<button class="button btn-cart" type="button" onclick="setLocation('<?php echo $this->getUrl('')."checkout/cart/add?product=".$product->getId()."&qty=1" ?>')" class="button"><span><?php echo $this->__('Add to Cart') ?></span></button>
</div>
<br/><br/>
<?php endforeach ?>
</ul>
</div>
</div>
2 ответа
Это на самом деле будет немного сложно. Может быть, я перебрал, но вам нужно будет сделать пару вещей. Это делает его одним столбцом элемента, потому что он выполняет foreach и просто выплевывает каждый элемент. Чтобы сделать это двумя столбцами, вам нужно посчитать элементы в вашем списке и разделить на два. Оттуда вы можете использовать несколько итераций, чтобы разделить его на два массива, а затем выполнить foreach для обоих полученных массивов.
Для каждого массива вы хотите его в div с CSS-стилями для левого или правого столбца. Кроме того, вам следует решить, нужно ли разделять элементы по середине, первая часть помещается в столбец 1, а последняя - в столбец 2. Или вы можете предпочесть, чтобы нечетные элементы помещались в столбец 1, а четные элементы - в столбец 2.
Если вы ищете более подробный ответ, я могу дать вам один, но он не простой. Определенно потребуется немного перекодирования, если вам это удобно.
Вот обзор того, что вы можете сделать: Как отобразить два столбца таблицы на строку в цикле php
Вот решение, основанное на предложении и рекомендации Нейта. Был бы заинтересован в других способах сделать то же самое
<?php
$_categoryId = $this->getCategoryId();
$productCollection = Mage::getModel('catalog/category')->load($_categoryId)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4)
->setOrder('price', 'ASC');
$cartHelper = Mage::helper('checkout/cart');
$x = 1;
?>
<div class='block block-list'>
<div class='block-title'><strong><span><?php echo $this->__('FEATURED PRODUCTS') ?></span></strong></div>
<div class='block-content'>
<ul>
<h2><?php echo $this->__( $this->getLabel() ); ?></h2>
<table>
<tr>
<?php foreach ($productCollection as $product): ?>
<?php
$x++;
if (($x % 2) == 0){
echo "</tr><tr>";
}
?>
<td>
<div class="item">
<a class="product-image" href="<?php echo $product->getProductUrl() ?>">
<img src="<?php echo $this->helper('catalog/image')->init($product, 'small_image')->resize(180); ?>" alt="<?php echo $this->htmlEscape($this->getImageLabel($product, 'small_image')) ?>" />
</a>
<br/>
<a class="product-name" href="<?php echo $product->getProductUrl() ?>"><?php echo $this->htmlEscape($product->getName()) ?></a>
<?php echo $this->getPriceHtml($product, true) ?>
</div>
<div class="cms-price-box" style=" text-align:center;"></div>
<div class="button-row" style="text-align:center;">
<button class="button btn-cart" type="button" onclick="setLocation('<?php echo $this->getUrl('')."checkout/cart/add?product=".$product->getId()."&qty=1" ?>')" class="button"><span><?php echo $this->__('Add to Cart') ?></span></button>
</div>
</td>
<?php endforeach ?>
</tr>
</table>
</ul>
</div>
</div>