UMIhelp

Разработка дополнительного функционала => Разработка модулей => Тема начата: max_rip от 18 Декабря 2013, 23:23:05

Название: Доработка модуля каталог
Отправлено: max_rip от 18 Декабря 2013, 23:23:05
Имеем кастом getCatalogObjects, который добавляет расширенные фильтры в каталог, вопрос теперь в SEO состовляющей модуля.
Получается имеем несколько основнх разделов сайта, в которые свалены все объекты каталогов по типам, вся фильтрация в этих каталогах идет на основании фильтров.  Было бы очень хорошо на основании некоторых фильтров изменять заголовки h1 и title, например выбраны товары только одного производителя или их типа.
А теперь вопрос, как из этого кастома изменить заголовок страницы или тайтл?
Пробовал внутри функции вызывать
$this->setTitle('asd');
$this->setH1("asd");
эффекта не дает(.
Используется xslt шаблон.
Название: Re:Доработка модуля каталог
Отправлено: admin от 19 Декабря 2013, 14:41:31
1. у модуля католог нет "SEO состовляющей модуля", поля р1 и title являются общими для всех страниц
2. "Имеем кастом getCatalogObjects" и "Пробовал внутри функции вызывать $this->setTitle('asd');$this->setH1("asd");"  не дают картины того что у вас происходит.
3. Обычно, при использовании xslt шаблона и создание html кода страницы, title берется из поля "title" текущей страницы, а заголовок из свойства result/@header, которое в свою очередь берется из поля "h1" текущей страницы.

Для изменения заголовка можно на уровне php в соответвующем месте использовать функцию setHeader() (пример в другой ветке форума (http://umihelp.ru/forum/index.php/topic,1219.msg5089.html#msg5089)).

Для изменения "title" стоит в нужное место шаблона (внутри title тегов) вывести нужное вам значение. Например используя макрос, который в определенных условиях (параметры вашего фильтра) выводит определенные значения.
Название: Re:Доработка модуля каталог
Отправлено: max_rip от 19 Декабря 2013, 17:03:11
имеем шаблон
<xsl:template match="/result[@method = 'category'][count(/result/parents/page) = 1]">
<div umi:element-id="{$document-page-id}" umi:field-name="descr" umi:empty="&empty-page-content;">
<xsl:value-of select=".//property[@name = 'descr']/value" disable-output-escaping="yes" />
</div>
<xsl:apply-templates select="document(concat('udata://custom/getCatalogObjects/', page/@id))/udata" />
</xsl:template>

И собственно функция
		public function getCatalogObjects($categoryId = false, $template = 'getCatalogObjects', $per_page = 12) {
self::initFilterList();
// Выясняем какая сортировка применена
$asc = (isset($_GET['asc']) && ($_GET['asc'] == "false")) ? 0 : 1;
$sort = isset($_GET['sort']) ? $_GET['sort'] : "h1";
$objects = self::getFilteredItems($this->FILTER_LIST, $categoryId, $per_page, $sort, $asc);
if($objects->length != 0) {

return self::parseTpl($objects, $template, $per_page);
} else {
return "Товары с указанными характеристиками не найдены.";
}
}
Добавление в которую
def_module::setHeader("asd");
или
$controller = cmsController::getInstance();
$controller->currentHeader = $h1;
Не приводит к желаемому результату.
Название: Re:Доработка модуля каталог
Отправлено: max_rip от 19 Декабря 2013, 17:08:21
Или на сколько я понимаю, тут просто идет порядок, сначала формируется заголовок, потом боди из боди уже идет вызов этой функции и получается, что повлиять на то что уже отработано нельзя.
В других CMS, делал в начале шаблона вызов контента, ответ записывал в переменную, а дальше уже формировал весь основной шаблон и в нужном месте выводил уже контент, тут я понимаю так не получится.
Проясните я вообще правильно понимаю алгоритм формирование вывода?
Название: Re:Доработка модуля каталог
Отправлено: admin от 19 Декабря 2013, 17:31:13
да, вы верно понимаете, если бы вы выводили макрос (функция в общей терминологии) то в ней бы setHeader сработал, а так ваша функция getCatalogObjects вызывается уже постфактум.

Вы можете в шаблон, в том месте где выводиться h1 и title, написать макросы. Эти макросы будут выводит либо то, что вывелось бы и без них, либо какие-то определенные значения если срабатывают необходимые условия, например в адресной строке появляются параметры фильтра.
Название: Re:Доработка модуля каталог
Отправлено: max_rip от 19 Декабря 2013, 17:34:49
т.е. я могу добавить макрос custom_title, в которой перенести функцию initFilterList в которую заложить логику генерации тайтлов и заголовка.
А правильно ли это?)
Можно ли поменять порядок работы? Чтобы первым отработал контент и в зависимости и потом только хедер шаблона и футер?
Название: Re:Доработка модуля каталог
Отправлено: max_rip от 19 Декабря 2013, 17:37:45
Может вообще не правильно изначальный подход, перенести это в глобальный кастом, если все это будет перенесено в кастом самого модуля?
Просто саму работу с фильтрами делал не я, мне хочется сделать это как-то по человечески.
Название: Re:Доработка модуля каталог
Отправлено: e.ioffe от 20 Декабря 2013, 10:00:10
Может вообще не правильно изначальный подход, перенести это в глобальный кастом, если все это будет перенесено в кастом самого модуля?
Просто саму работу с фильтрами делал не я, мне хочется сделать это как-то по человечески.

Думаю, имеет смысл вынести в custom модуля catalog.

По поводу header получается следующий код:


<title><xsl:apply-templates select="/result" mode="title" /></title>

Далее:

<xsl:template match="result" mode="title"><xsl:value-of select="@header" /></xsl:template>

<xsl:template match="result[@module = 'catalog' and @method = 'category'][count(/result/parents/page) = 1]" mode="title">
<xsl:apply-templates select="document('udata://catalog/getCategoryTitle/')/udata" />
</xsl:template>

В кастоме модуля каталог определяете метод getCategoryTitle, в котором формируете новый заголовок.
Название: Re:Доработка модуля каталог
Отправлено: max_rip от 25 Декабря 2013, 14:17:33
Спасибо за пример.
Да получается это самая большая проблема xslt шаблонизации в данный момент, что все выполняется уж очень последовательно.