mmkulikov 14 Жалоба Опубликовано: September 5, 2015 Собственно вопрос о том, как можно "вмешаться" в процесс формирования BreadcrumbsПолучилось, например, сделать свой Local_Grid_Constructor и перекрыв метод prepareBreadcrumbsисправить все по своему.Но для этого надо вклиниваться в шаблон.А возможен ли такой-же вариант прямо из своего приложения apps ?Или приложения отрабатывают раньше и еще нечего перекрывать?По крайней мере переопределить переменную в шаблоне не удалось Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
h-i 30 Жалоба Опубликовано: September 5, 2015 Можно образец, если не секрет фирмы? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mmkulikov 14 Жалоба Опубликовано: September 6, 2015 Можно образец, если не секрет фирмы?<?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-eiiu7Ebhttps://yadi.sk/i/Fd5HlI-piu7Gc 2 Дмитрий Кондин и h-i reacted to this Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: September 7, 2015 Видимо пришло время все элементы (крошки, заголовки и т.д.) выносить в отдельные методы, с возможностью перезаписи наследниками.Будем делать в новых версиях. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах