Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

max_rip

  • *
  • 11
  • +1/-0
    • Просмотр профиля
Доработка модуля каталог
« : 18 Декабря 2013, 23:23:05 »
Имеем кастом getCatalogObjects, который добавляет расширенные фильтры в каталог, вопрос теперь в SEO состовляющей модуля.
Получается имеем несколько основнх разделов сайта, в которые свалены все объекты каталогов по типам, вся фильтрация в этих каталогах идет на основании фильтров.  Было бы очень хорошо на основании некоторых фильтров изменять заголовки h1 и title, например выбраны товары только одного производителя или их типа.
А теперь вопрос, как из этого кастома изменить заголовок страницы или тайтл?
Пробовал внутри функции вызывать
$this->setTitle('asd');
$this->setH1("asd");
эффекта не дает(.
Используется xslt шаблон.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Re:Доработка модуля каталог
« Ответ #1 : 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() (пример в другой ветке форума).

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

*

max_rip

  • *
  • 11
  • +1/-0
    • Просмотр профиля
Re:Доработка модуля каталог
« Ответ #2 : 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;
Не приводит к желаемому результату.

*

max_rip

  • *
  • 11
  • +1/-0
    • Просмотр профиля
Re:Доработка модуля каталог
« Ответ #3 : 19 Декабря 2013, 17:08:21 »
Или на сколько я понимаю, тут просто идет порядок, сначала формируется заголовок, потом боди из боди уже идет вызов этой функции и получается, что повлиять на то что уже отработано нельзя.
В других CMS, делал в начале шаблона вызов контента, ответ записывал в переменную, а дальше уже формировал весь основной шаблон и в нужном месте выводил уже контент, тут я понимаю так не получится.
Проясните я вообще правильно понимаю алгоритм формирование вывода?

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Re:Доработка модуля каталог
« Ответ #4 : 19 Декабря 2013, 17:31:13 »
да, вы верно понимаете, если бы вы выводили макрос (функция в общей терминологии) то в ней бы setHeader сработал, а так ваша функция getCatalogObjects вызывается уже постфактум.

Вы можете в шаблон, в том месте где выводиться h1 и title, написать макросы. Эти макросы будут выводит либо то, что вывелось бы и без них, либо какие-то определенные значения если срабатывают необходимые условия, например в адресной строке появляются параметры фильтра.

*

max_rip

  • *
  • 11
  • +1/-0
    • Просмотр профиля
Re:Доработка модуля каталог
« Ответ #5 : 19 Декабря 2013, 17:34:49 »
т.е. я могу добавить макрос custom_title, в которой перенести функцию initFilterList в которую заложить логику генерации тайтлов и заголовка.
А правильно ли это?)
Можно ли поменять порядок работы? Чтобы первым отработал контент и в зависимости и потом только хедер шаблона и футер?

*

max_rip

  • *
  • 11
  • +1/-0
    • Просмотр профиля
Re:Доработка модуля каталог
« Ответ #6 : 19 Декабря 2013, 17:37:45 »
Может вообще не правильно изначальный подход, перенести это в глобальный кастом, если все это будет перенесено в кастом самого модуля?
Просто саму работу с фильтрами делал не я, мне хочется сделать это как-то по человечески.

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Доработка модуля каталог
« Ответ #7 : 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, в котором формируете новый заголовок.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

max_rip

  • *
  • 11
  • +1/-0
    • Просмотр профиля
Re:Доработка модуля каталог
« Ответ #8 : 25 Декабря 2013, 14:17:33 »
Спасибо за пример.
Да получается это самая большая проблема xslt шаблонизации в данный момент, что все выполняется уж очень последовательно.