Magento - вызывать статический блок, когда php BodyClass == ‘что угодно - PullRequest
0 голосов
/ 04 ноября 2010

в моем файле 2col-inside.phtml я могу успешно вызвать блок, используя: <?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('blue-banner')->toHtml() ?>

однако я хотел бы показать уникальный баннер на основе URI или класса тела. так что-то вроде:

<?php if($bodyClass['category-blue']): ?>  
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('blue-banner')->toHtml() ?>
<?php elseif($bodyClass['category-red']): ?>  
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('red-banner')->toHtml() ?> 
<?php else($bodyClass['category-yellow']): ?>  
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId('yellow-banner')->toHtml() ?>  
<?php endif;?>

Установка BlockId для URL страницы также будет работать (мне просто нужно вернуться и переименовать все блоки, чтобы они точно соответствовали URL страницы), но я не знаю, как извлечь просто URL страницы.

Есть предложения?

Ответы [ 4 ]

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

Вам даже не нужно выполнять какую-либо разработку для отображения статического блока на определенной странице категории или любой странице, основанной на cms или макете.Используйте функциональность виджетов Magento.

  1. Перейти к «CMS -> Виджеты»

  2. Нажмите кнопку «Добавить новый экземпляр виджета»

  3. Выберите тип виджета (в вашем случае это «Статический блок CMS») и тему, в которой он должен отображаться.Нажмите кнопку «Продолжить».

  4. Введите «Заголовок экземпляра виджета» и выберите магазины, в которых он должен отображаться.

  5. Нажмите кнопку «Добавить обновление макета» и выберитенастройки виджета «отображать на» (категории, продукты, страницы CMS, страницы оформления заказа и т. д.) и выберите, в какой части страницы вы хотите их отобразить.

  6. Перейдите на вкладку «Параметры виджета» и выберите статический блок, который вы хотите показать.

Надеюсь, это поможет вам решить вашу проблемубез какого-либо развития:)

0 голосов
/ 05 ноября 2010

попробуйте это внутри вашего app/design/frontend/default/<theme>/catalog/catalog/category/view.phtml:

$cat_name = $this->getCurrentCategory()->getName();
$block_name = $cat_name.'-banner';  
echo $this->getLayout()->createBlock('cms/block')->setBlockId($block_name)->toHtml();

Добавьте туда несколько операторов if, чтобы проверить наличие нулей, и вас не будет.

Ура, JD

0 голосов
/ 06 ноября 2010

В вашем 2col-inside.phtml добавьте это, где вы хотите баннер.

<?php echo $this->getChildHtml('banner_block') ?>

Это безопасно, потому что ничего не будет отражено, если banner_id не существует.

Для каждой категории, в которой вы хотите отредактировать баннер, есть поле «Обновление пользовательского макета», содержащее следующее ...

<reference name="content">
    <block type="cms/block" name="banner_block">
        <action method="setBlockId"><block_id>blue_banner</block_id></action>
    </block>
</reference>

... при необходимости изменив block_id. То же самое можно сделать на страницах продукта и CMS. Если страница не использует шаблон 2cols-inside.phtml, ничего не изменится.

0 голосов
/ 04 ноября 2010

не очень красиво, но это работает, если вы называете статические блоки так же, как имя вашей страницы:

<?php   $_base_url = $this->helper('core/url')->getHomeUrl();
        $class = str_replace($_base_url, '', $this->helper('core/url')->getCurrentUrl());
        $pagetitle = str_replace('.html', '', $class);
        $page = str_replace('industries/', '', $pagetitle);
?>
<?php echo $this->getLayout()->createBlock('cms/block')->setBlockId($page)->toHtml() ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...