Создание модуля для вывода ссылок CMS в prestashop

Модуль будет выводить ссылки в футере магазина и к нему будут подключаться стили из header. Для этого в функции установки включены хуки displayFooter и displayHeader. Для хранения данных будет использована таблица ps_configuration и переменная для работы с ней BLOCKCMSOUT_CMS_F. Так выглядит функция установки:
1 2 3 4 5 6 7 8 |
public function install() { return parent::install() && $this->registerHook('displayFooter') && $this->registerHook('displayHeader') && Configuration::updateValue('BLOCKCMSOUT_CMS_F', 1); } |
Основная работа модуля будет происходить в хуке футера. При обращении к модулю будет формироваться запрос на получение данных из таблиц CMS согласно введенным параметрам в модуле, и как результат будет сформирован массив для передачи в файл шаблона модуля blockcmsfooterout.tpl. Для улучшения производительности подключена работа с кешем. Так выглядит функция футера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
public function hookDisplayFooter($params) { if (!$this->isCached('blockcmsfooterout.tpl', $this->getCacheId())) { $context = Context::getContext(); $id_lang = (int)$this->context->language->id; $id_shop = (int)$this->context->shop->id; $sql = new DbQuery(); $sql->select('*'); $sql->from('cms', 'c'); $sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang.' AND l.id_shop = '.(int)$id_shop); $sql->innerJoin('cms_shop', 'cs', 'c.id_cms = cs.id_cms AND cs.id_shop = '.(int)$id_shop); $sql->where('c.active = 1'); $sql->where('c.id_cms in ('.trim(Configuration::get('BLOCKCMSOUT_CMS_F')).')'); $sql->orderBy('position'); $arr_cat = Db::getInstance()->executeS($sql); if (count($arr_cat) > 0){ foreach ($arr_cat as $value => $cat) { $arr_cat[$value]['link'] = $context->link->getCMSLink((int)$cat['id_cms'], $cat['link_rewrite']); } } $this->smarty->assign(array( 'cms_out_footer_arr' => $arr_cat )); } return $this->display(__FILE__, 'blockcmsfooterout.tpl', $this->getCacheId()); } |
Сам файл шаблона blockcmsfooterout.tpl представляет из себя следующий вид:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<section id="block_cms_footer_out" class="footer-block col-xs-12 col-sm-2"> {if isset($cms_out_footer_arr)} <h4>{l s='Block CMS Out' mod='blockcmsfooterout'}</h4> {if count($cms_out_footer_arr) > 0} <ul class="cat_content"> {foreach from=$cms_out_footer_arr item=cms_contact_page name=cms_contact_page_name} <li class="bullet"> {if $smarty.foreach.cms_contact_page_name.first}<div class="arr_top_rel"><div></div></div>{/if} <a href="{$cms_contact_page.link}" title=""><span>{$cms_contact_page.meta_title|escape:html:'UTF-8'}</span></a> </li> {/foreach} <li><a href="{$link->getPageLink('contact', true)|escape:'html'}" title="{l s='Our contacts' mod='blockcmsfooterout'}">{l s='Our contacts' mod='blockcmsfooterout'}</a></li> </ul> {/if} {else} {l s='No cms to show' mod='blockcmsfooterout'} {/if} </section> |
Для наглядности сюда вставлена ссылка на контакты.
Для работы модуля, в конфигурации модуля необходимо ввести только id cms, которые активны.
Список всех Id cms находится: Настройки — Страницы:
Результат работы модуля выглядит следующим образом:
Все файлы с модулем упакованы в архив, который можете скачать здесь:
[download id=»1200″]
Здравствуйте!
Как этим модулем выводить категории/подкатегории в 2 колонки желательно?
Я попробовал id категорий вместо id cms конечно, но не работает. А так ваш модуль делает то же что и стандартный. Но у меня к сожалению cms страниц мало, а вот категорий много.
Для категорий он не подойдет.
Там нужно многое менять в этом случае.
Он отличается от стандартного — вы можете просто вывести любые ссылки на страницы указав их id без какой-либо привязки к категории.
В стандартном модуле нет такой гибкости.
Понятно. А не подскажете правильный код для вставки ссылок прямо в tpl шаблон? Я бы их вручную прописал все.
Но в коде ошибки делаю, не выводятся.
По принципу site.ru/glavnaya — title
В таком виде как и стандартном модуле:
{$link->getPageLink(‘stores’)|escape:’html’:’UTF-8′}
Добрый день. Разместил ваш модуль на форумах престы (с ссылкой на автора — данную статью). Если вы это не разрешаете, напишите я удалю.
Вопрос простой — как изменит отображаемое имя Block Cms Out в футере на любое другое ? (например на Сервис и поддержка)
Пока решил путем перевода. Просто в переводе поставил нужный перевод строки.
Да, через перевод правильнее.