Привет, Харачеловек.
Я надеюсь, что ты уже работал с Symphony и имеешь определенный минимум знаний, поэтому я хочу поделиться с тобой своим опытом работы с Symphony и решением проблем, с которыми столкнулся я.
Для начала скажу, что практически любая мелочь, с которой ты можешь столкнуться, может быть разрешена в течении нескольких минут, благодоря активному форуму.
• URL. Два в одном.
• Необходимость сделать нормальный preview какой-либо статьи.
• Свой title и meta-description для каждой страницы.
• Сокращенные URL для статических страниц.
• Global Data Sources.
Основная проблема URL Param`ов Symphony заключается в том, что обычным способом невозможно сделать одновременно Дата Сорс (DS) для списка статьей и для самой статьи.
Предположим, что есть список статей, которые разбиты по страницам. В стандартном варианте URL для постраничной навигации будет выглядеть так: /articles/<page_number>, а для статьи: /article/my-cool-article.
Данный метод не очень хорош для SEO хотя бы тем, что на одинаковые, по сути, разделы ведут две разные ссылки.
Решение данной проблемы, как оказалось, довольно тривиально.
Как известно каждый DS – это отдельный php файл. Исходя из этого, нужно:
Если ты обратил внимание, то в в кусочке XSLT кода мелькнул вызов темплейта, под названием «truncate».
На самом деле, сделать привью кусочка текста можно и без дополнительных темплейтов, достаточно только разобраться, как работает функция position () и дальше уже экспериментировать с ней.
Использование функции position () доставляет определенные неудобства. К счастью Symphony CMS имеет достаточный набор разных XLST утилит, среди которых есть и HTML Truncate Advanced, благодаря которой обрезание куска HTML кода становится проще простого.
Хочу опять обратить твое, хабрачеловек, внимание на php код, который был в самом начале. Ты мог заметить дополнительно выводимые поля meta-title и meta-description.
Так вот, при открытии определенной статьи дополнительно в XML Output Symphony будут выводится два этих поля.
Все, что тебе нужно это, опять же, немного поковырять page-title.xsl и сделать примерно такую маленькую хитрость:
Бывает, иногда, что стандартный подход Symphony к выводу URL`ов не всегда подходит.
Предположим, что у нас есть просто какие-то статические страницы, например, example.com/static/contact. Согласись, /static/ ну никак не вписывается в картину красивых и четких URL`ов.
Мне, например, необходимо, что бы конкретная страница находилась по адресу http://example.com/contact.
Опять же, на помощь приходит extension Root Page Params, установив и настроив который, получится именно необходимый результат.
Вообще, Data Source в Symphony, это своего рода WHERE для определенной таблицы данных. DS, как и любой WHERE позволяет выбрать определенные данные по каким-либо критериям.
На любом сайте, я уверен, найдутся такие данные, которые должны быть на каждой странице, единственный нюанс — данные должны быть редактируемыми.
Конечно, можно выбирать каждую страницу Symphony и в ручную отмечать какие дополнительные DS выводить, но это приводит к, своего рода, хаосу, когда где-то что-то какое-то количество раз отмечено. Это все нужно помнить, не забыть добавить на новую страницу и т.п.
Опять же, на помощь приходит extension Global Resource Loader, позволяющий в одном удобном месте собрать все необходимые DS.
Часть статьи получилась в виде описания дополнений к Symphony, часть — освоенная на личном опыте и потраченном времени.
По-моему, для создания полноценного сайта эти дополнения необходимы. Именно по этому я решил поделиться с любым, кто разрабатывает или планирует разрабатывать сайт на основе Symphony CMS.
Если хотя бы одному человеку, прочитавшему эту статью, пригодится мой опыт, то я смело могу считать свою миссию выполненной.
За сим откланиваюсь.
Спасибо.
Я надеюсь, что ты уже работал с Symphony и имеешь определенный минимум знаний, поэтому я хочу поделиться с тобой своим опытом работы с Symphony и решением проблем, с которыми столкнулся я.
Для начала скажу, что практически любая мелочь, с которой ты можешь столкнуться, может быть разрешена в течении нескольких минут, благодоря активному форуму.
Покрываемые вопросы
• URL. Два в одном.
• Необходимость сделать нормальный preview какой-либо статьи.
• Свой title и meta-description для каждой страницы.
• Сокращенные URL для статических страниц.
• Global Data Sources.
URL. Два в одном
Основная проблема URL Param`ов Symphony заключается в том, что обычным способом невозможно сделать одновременно Дата Сорс (DS) для списка статьей и для самой статьи.
Предположим, что есть список статей, которые разбиты по страницам. В стандартном варианте URL для постраничной навигации будет выглядеть так: /articles/<page_number>, а для статьи: /article/my-cool-article.
Данный метод не очень хорош для SEO хотя бы тем, что на одинаковые, по сути, разделы ведут две разные ссылки.
Решение данной проблемы, как оказалось, довольно тривиально.
Как известно каждый DS – это отдельный php файл. Исходя из этого, нужно:
- провести небольшую манипуляцию внутри функции grab. Перед
- $result = new XMLElement($this->dsParamROOTELEMENT);
- if (isset($this->_env['env']['url']['action'])) {
- $action = $this->_env['env']['url']['action']; //Действие. Page || Article
- if (is_numeric($action)) { //Если страница
- $this->dsParamFILTERS = array('45' => 'yes'); //id чекбокса Published
- $this->dsParamSTARTPAGE = $action;
- } else { //Если страница конкретной статьи
- $this->dsParamINCLUDEDELEMENTS[] = 'meta-title'; //Дополнительно выводимые поля для SEO.
- $this->dsParamINCLUDEDELEMENTS[] = 'meta-description';
- $this->dsParamFILTERS = array(
- '45' => 'yes', //id чекбокса Published
- '65' => $action, //собственно url handle (my-cool-article)
- );
- }
- }
- откорректировать XSL соответственно для вывода либо списка статьей, либо статью:
- <xsl:template match="articles">
- <xsl:for-each select="entry">
- <xsl:choose>
- <xsl:when test=" $action != '' and string(number($action)) = 'NaN' ">
- <h1><xsl:value-of select="title/." /></h1>
- <xsl:apply-templates select="body/* | body/text()" mode="html" />
- </xsl:when>
- <xsl:otherwise>
- <h2><a href="{$root}/{$current-page}/{filename/@handle}"><strong><xsl:value-of select="title/." /></strong></a></h2>
- <xsl:call-template name="truncate">
- <xsl:with-param name="node" select="brief-description" />
- <xsl:with-param name="limit" select="'500'" />
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:for-each>
- </xsl:template>
Необходимость сделать нормальный preview какой-либо статьи
Если ты обратил внимание, то в в кусочке XSLT кода мелькнул вызов темплейта, под названием «truncate».
На самом деле, сделать привью кусочка текста можно и без дополнительных темплейтов, достаточно только разобраться, как работает функция position () и дальше уже экспериментировать с ней.
Использование функции position () доставляет определенные неудобства. К счастью Symphony CMS имеет достаточный набор разных XLST утилит, среди которых есть и HTML Truncate Advanced, благодаря которой обрезание куска HTML кода становится проще простого.
Свой title и meta-description для каждой страницы
Хочу опять обратить твое, хабрачеловек, внимание на php код, который был в самом начале. Ты мог заметить дополнительно выводимые поля meta-title и meta-description.
Так вот, при открытии определенной статьи дополнительно в XML Output Symphony будут выводится два этих поля.
Все, что тебе нужно это, опять же, немного поковырять page-title.xsl и сделать примерно такую маленькую хитрость:
- <xsl:template name="page-title">
- <xsl:value-of select="$website-name"/>
- <xsl:text> — </xsl:text>
- <xsl:choose>
- <xsl:when test="data/*/entry/meta-title/. != '' ">
- <xsl:value-of select="data/*/entry/meta-title/." />
- </xsl:when>
-
- <xsl:otherwise>
- <xsl:value-of select="$page-title"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
Сокращенные URL для статических страниц
Бывает, иногда, что стандартный подход Symphony к выводу URL`ов не всегда подходит.
Предположим, что у нас есть просто какие-то статические страницы, например, example.com/static/contact. Согласись, /static/ ну никак не вписывается в картину красивых и четких URL`ов.
Мне, например, необходимо, что бы конкретная страница находилась по адресу http://example.com/contact.
Опять же, на помощь приходит extension Root Page Params, установив и настроив который, получится именно необходимый результат.
Global Data Sources
Вообще, Data Source в Symphony, это своего рода WHERE для определенной таблицы данных. DS, как и любой WHERE позволяет выбрать определенные данные по каким-либо критериям.
На любом сайте, я уверен, найдутся такие данные, которые должны быть на каждой странице, единственный нюанс — данные должны быть редактируемыми.
Конечно, можно выбирать каждую страницу Symphony и в ручную отмечать какие дополнительные DS выводить, но это приводит к, своего рода, хаосу, когда где-то что-то какое-то количество раз отмечено. Это все нужно помнить, не забыть добавить на новую страницу и т.п.
Опять же, на помощь приходит extension Global Resource Loader, позволяющий в одном удобном месте собрать все необходимые DS.
Заключение
Часть статьи получилась в виде описания дополнений к Symphony, часть — освоенная на личном опыте и потраченном времени.
По-моему, для создания полноценного сайта эти дополнения необходимы. Именно по этому я решил поделиться с любым, кто разрабатывает или планирует разрабатывать сайт на основе Symphony CMS.
Если хотя бы одному человеку, прочитавшему эту статью, пригодится мой опыт, то я смело могу считать свою миссию выполненной.
За сим откланиваюсь.
Спасибо.