Краткий обзор. Я пытаюсь вернуть результаты из определенного набора статических блоков в файл phtml (который затем вызывается на странице cms ) в Magento .
Примечание. Я искал по всему Google и некоторые ответы стали ближе, чем другие, но ничего, что я пробовал, похоже, работает на 100%?
Детали:
У меня уже есть набор конкретных статических блоков, которые начинаются с идентификатора testimonial-
. Например, каждый статический блок выглядит так: testimonial-1
, testimonial-2
, testimonial-3
и так далее. У меня в общей сложности 5 на моем сайте dev (больше на сайте, но это не имеет значения здесь).
У меня есть страница CMS с кодом, потянув в файл name.phtml
(расположение моего файла phtml здесь: app / design / frontend / [package] / [template] / template / page / ):
{{block type="core/template" template="page/name.phtml" title="Others Say:" identifier="testimonial-"}}
Вот мой код для файла .phtml:
<?php // add the collection with filters $collection = Mage::getModel('cms/block')->getCollection() ->addFieldToFilter('identifier', array('like'=>'testimonial'.'%')) ->addFieldToFilter('is_active', 1); // get the count $blockCount = $collection->count(); echo 'Block Count: ' . $blockCount . '<br />'; // just for testing $blockNum = 1; foreach($collection as $key => $value){ $_blockId = $this->getIdentifier(); $block_ID = $_blockId . $blockNum; echo "Key: " . $key . " - " . "Block ID: " . $block_ID . "<br />"; $blockNum++; } $_block = $this->getLayout()->createBlock('cms/block')->setBlockId($block_ID); if ($_block) : ?> <div class="block block-testimonial"> <div class="block-title"> <strong><?php echo $this->getTitle(); ?></strong> </div> <div class="block-content"> <?php echo $_block->toHtml(); ?> </div>
Цикл foreach($collection as $key => $value)
печатает это:
Key: 27 - Block ID: testimonial-1 Key: 28 - Block ID: testimonial-2 Key: 29 - Block ID: testimonial-3 Key: 30 - Block ID: testimonial-4 Key: 31 - Block ID: testimonial-5
И это хорошо.
Тем не менее, единственным блоком, который является эхом, является последний блок ( testimonial-5
). Поскольку я пытаюсь перечислить все тестовые блоки, как я могу отбросить каждый идентификатор блока на страницу?
Полегче на меня, я новичок на php.
Вы не печатаете блок внутри цикла foreach. Решение: переместите скобку в конец вставленного кода
$blockNum = 1; foreach($collection as $key => $value){ $_blockId = $this->getIdentifier(); $block_ID = $_blockId . $blockNum; echo "Key: " . $key . " - " . "Block ID: " . $block_ID . "<br />"; $blockNum++; $_block = $this->getLayout()->createBlock('cms/block')->setBlockId($block_ID); if ($_block) : ?> <div class="block block-testimonial"> <div class="block-title"> <strong><?php echo $this->getTitle(); ?></strong> </div> <div class="block-content"> <?php echo $_block->toHtml(); ?> </div> <?php endif; }
Я думаю, что на Magento Connect есть несколько модулей отзывов, которые делают работу, которую вы хотите. С другой стороны, если вы ищете «простое» решение, или если вы пытаетесь играть с Magento, это подход.