mmkulikov

Breadcrumbs

Recommended Posts

Собственно вопрос о том, как можно "вмешаться" в процесс формирования Breadcrumbs

Получилось, например, сделать свой Local_Grid_Constructor и перекрыв метод prepareBreadcrumbs

исправить все по своему.

Но для этого надо вклиниваться в шаблон.

А возможен ли такой-же вариант прямо из своего приложения apps ?

Или приложения отрабатывают раньше и еще нечего перекрывать?

По крайней мере переопределить переменную в шаблоне не удалось  :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно образец, если не секрет фирмы?

<?php/*** Created by PhpStorm.* User: Mikhail* Date: 04.09.2015* Time: 12:19*/class Local_Grid_Constructor extends Grid_Constructor {/*** Формируем "хлебные крошки", оборачиваем стандартные* по формату RDF* Дополняем если нашли доп.парметры, например ?u_lesa=1** @param $params* @param string $url* @return array|string*/protected function prepareBreadcrumbs($params, $url = ''){$breadcrumbs = parent::prepareBreadcrumbs($params,$url);if (empty($breadcrumbs)) return $breadcrumbs;$columns = $this->_getColumnsNameIds();$REQUESTURIPATH=Sitebill::getClearRequestURI(); // Строка без GET параметров с '?u_lesa=1'/* echo "<pre>";global $smarty;var_dump($this->getRequestValue("seo-router"));echo "</pre>";die('');*/$breadcrumbs = explode(" / ",$breadcrumbs); // Строку назад в массивfor($i=0; $i < sizeof($breadcrumbs)-1; $i++){$breadcrumbs[$i] = $this->_makeRDF($breadcrumbs[$i]);}$r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif($REQUESTURIPATH != "index.php" && preg_match("#\?(\w+)=#",$r_uri,$matches)){if(isset($columns[$matches[1]])) {$breadcrumbs[sizeof($breadcrumbs)-1] = $this->_makeRDF($breadcrumbs[sizeof($breadcrumbs)-1]);$breadcrumbs[] = "".$columns[$matches[1]]["title"]."";}} else {};$breadcrumbs = implode(" / ", $breadcrumbs); // Обработанный массив назад в строку "крошек"//$this->template->assert('meta_title', $_SERVER['REQUEST_URI']);return $breadcrumbs;}/*** Возвращает массив со всеми колонками модели data** @return array**/private function _getColumnsNameIds(){$DBC=DBC::getInstance();$columns_ids=array();$query='SELECT columns_id, name, title FROM '.DB_PREFIX.'_columns WHERE table_id=(SELECT table_id FROM '.DB_PREFIX.'_table WHERE `name`=\'data\' LIMIT 1)';$stmt=$DBC->query($query);if($stmt){while($ar=$DBC->fetch($stmt)){$columns_ids[$ar['name']]["id"]=$ar['columns_id'];$columns_ids[$ar['name']]["title"]=$ar['title'];}}return $columns_ids;}private function _makeRDF($breadcrumb) {$breadcrumb = "<span typeof=\"v:Breadcrumb\">".str_replace("<a ","<a property=\"v:title\" rel=\"v:url\"",$breadcrumb)."</span>";return $breadcrumb;}}

Вот еще "сырой" код.

Фишка в том, что добавляются seo теги в "крошки". Урл обрабатываются приложением (уже написал).

Т.е. под любой параметр фильтра, например, checkbox u_lesa, можно описать для пары категория+параметр фильтра

- свой ЧПУ

- свои мета сео плюшки

Хотелось-бы ограничиться приложением, но сейчас та часть, которая обрабатывает ЧПУ в приложении, а прописание всяких

meta_xxxx в гриде

Вот скрины приложения

https://yadi.sk/i/w6p67-eiiu7Eb

https://yadi.sk/i/Fd5HlI-piu7Gc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Видимо пришло время все элементы (крошки, заголовки и т.д.) выносить в отдельные методы, с возможностью перезаписи наследниками.

Будем делать  в новых версиях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас