Показаны сообщения с ярлыком XSLT. Показать все сообщения
Показаны сообщения с ярлыком XSLT. Показать все сообщения

четверг, 6 сентября 2012 г.

Создание многоязычного сайта в Composite C1 CMS (7). Перевод строк в шаблонах и функциях

Темы перевода строк в шаблонах страниц и в XSLT-функциях на многоязычных сайтах я уже касался ранее так или иначе.

Локализация строк в XML-шаблонах и XSLT-функциях, в принципе, одинакова.

В двух словах:
  1. Вы создаете ресурсный файл для строк для языка сайтам по умолчанию (например, английского).
  2. Заносите туда все строки.
  3. Далее создаете копию этого ресурсного файла, но уже для второго языка сайта (скажем, русского).
  4. Переводите строки там.
  5. Далее в шаблоне или функции, вместо жестко прописанных строк вы используете специальный XML-элемент <lang:string/>.
  6. Используя специальный синтаксис вызова строки из ресурсных файлов, вы указываете нужную строку в атрибуте key указанного выше элемента.
Все остальное система делает сама. То есть, при переключении языка на сайте, пользователь увидит строки на странице (которые на самом деле, прописаны в шаблонах и функциях) на нужном языке.

понедельник, 6 августа 2012 г.

Добавление мета-тегов на страницы сайта (2)

В предыдущем сообщении, мы решили добавить к страницам мета-тег keywords - в рамках поисковой оптимизации (SEO).

Я предложил добавить мета-теги при помощи двух компонентов:
  • мета-поля, которое мы добавили к каждой странице
  • функции, которая обработает значение мета-поля у конкретной страницы, и представит его в виде нужного мета-тега keywords
Для мета-поля мы создали метатип "Ключевые слова", добавили его к главной странице с опцией "наследовать на всех дочерних страницах", и для нужных нам страниц мы добавили ключевые слова в это  мета-поле на вкладке "Метаданые" в редакторе страниц.

Теперь давайте создадим функцию, которая будет считывать значение этого поля у текущей  страницы, и если в этом поле будет значение, то будет добавлять на страницу мета-тег keywords с  этим значением.

среда, 31 августа 2011 г.

Изменение содержимого файлов на сайте пакетами расширения

Продолжим тему ручного редактирования пакетов (модулей) расширения, начатую в прошлом сообщении. И так вы создали свой пакет расширения при помощи Package Creator'а.

И вам нужно добавить параметр в web.config сайта. Как это сделать при установке пакета?

Вы уже знаете, что установкой пакета в C1 занимаются "фрагментарные инсталляторы". Поэтому, все что нам нужно - это добавить запись о нужном инсталляторе в install.xml пакета и сконфигурировать инсталляцию с его помощью.

В С1 есть фрагментарный инсталлятор, который позволяет при установке пакета производить трансформацию указанного XML-файла с помощью XSL-файла, находящегося в пакете - FileXslTransformationPackageFragmentInstaller.

среда, 27 июля 2011 г.

Консольные приложения (18): Выполнение C1-функции

В качестве своих собственных действий, наряду с запуском рабочих потоков и открытием ASPX-страницы, вы также можете подключать к элементам дерева в админке еще и выполнение C1-функций.

C1-функция должна возвращать значение в виде XHTML и, таким образом, оно будет отображаться в правой части админке как "документ" (представление).

Давайте сначала создадим какую-нибудь простую C1-функцию, а затем подключим ее выполнение в админке.


вторник, 19 июля 2011 г.

Управление ссылками на страницы в XSLT и C#

Если вы вставляли ссылку в визуальном редакторе C1, то обратили внимание, что фактически ссылка создается такая:

~/Renderers/Page.aspx?PageId={GUID}

где {GUID} - это идентификатор страницы. Однако в браузере, такая ссылка корректно заменяется на более привычную, напр.: http://www.contoso.ru/Products.aspx

Ничто вам не мешает обратиться в браузере к странице и по идентификатору:

http://www.contoso.ru/Renderers/Page.aspx?PageId={GUID}

Такая форма ссылки используется в версиях С1 до 2.1.1 (включительно). А вот в версии 2.1.3 (бета) ссылка формируется по-другому - более кратко и удобно:

~/page({GUID})

Напр:

~/page(1544E0B9-48FA-46D9-A368-3513E02A9FEB)

И в версии 2.1.3, в браузере она будет представлена, напр., так: http://www.contoso.ru/Products

Зная эту модель вы можете - при необходимости - создавать ссылки на лету и в XSLT, и в C#.

вторник, 19 апреля 2011 г.

Вызов C1 функций в XSLT

Как вы уже знаете, в C1 широко используются функции. По происхождению - это могут быть XSLT, внешние и встроенные C#, SQL или визуальные функции. Но при их использовании - это уже не имеет значение, это просто C1 функции.

Так вот, эти функции можно вызывать из XSLT функций. В зависимости от ваших целей, вы можете вызывать эти функции до, во время или после того, как XSLT будет выполнен.

Рассмотрим каждый вариант.

пятница, 18 февраля 2011 г.

Метатипы: (4) Использование


Итак, мы создали метатип и добавили его элемент (мета-поле) на страницу. По умолчанию опция ShowDate включена.

Теперь изменим функцию ShowCreateDate, которую мы создали ранее, так, чтобы она показывала дату последнего изменения на конкретной странице сайта, только если опция ShowDate включена.

среда, 9 февраля 2011 г.

XSLT функции: (5) Использование на сайте

А теперь добавим нашу функцию во все шаблоны страниц, используемые на сайте. Я добавляю функцию в шаблоны, а не в конкретные страницы, потому что:
  • во-превых, мне нужно, чтобы дата последнего изменения появлялась на каждой странице (изначально)
  • во-вторых, именно такое использование функции понадобиться мне для следующих сообщений, в которых я расскажу про использование метатипов.
Добавить функцию в шаблон очень просто.

XSLT функции: (4) Использование расширений

В С1 есть т.н. “XSLT расширения”, которые содержат в себе ряд полезных функций, например, для форматирования дат, парсинга XML-кода и т.п. Сами расширения обычно написаны на C#, но подключаются именно как XSLT расширения и их функции можно непосредственно использовать в шаблонах XSLT.

вторник, 8 февраля 2011 г.

XSLT функции: (3) Редактирование шаблона

С1 уже создал путь к элементу, возвращаемого функцией GetIPageXml. Воспользуемся им. Для этого откроем вкладку Просмотр и скопируем в буфер обмена строку /in:inputs/in:result[@name='GetIPageXml']/IPage из комментария:

<!-- Function Call Result (2 ms), XPath /in:inputs/in:result[@name='GetIPageXml']/IPage -->


XSLT функции: (2) Использование фильтра

Для каждого типа данных C1 автоматически создает несколько типов фильтров.

Мы воспользуемся одним из них - FieldPredicatesFilter. В качестве предиката для поля Id мы вызовем функцию GuidEquals, и используя функцию GetPageId, укажем идентификатор текущей страницы для значения предиката.

XSLT функции: (1) Создание

Несколько сообщений из этого цикла я первоначально задумывал в рамках другой темы - создание и использование метатипов. Но то, что здесь описано - создание определенной XSLT функции - тянет на собственную тему. Поэтому я сначала расскажу про создание этой функции, а затем, опираясь на данный материал, перейду к циклу сообщений про метатипы.

Мы создадим функцию, которая будет показывать на каждой странице сайта дату последнего изменения страницы.

вторник, 25 января 2011 г.

Создание и использование папок данных (2)

Итак, в предыдущем сообщении мы создали папку данных SeeAlsoLinks для хранения ссылок на страницы сайта, связанные с текущей страницей тематически, добавили эту папку к нужным страницам и добавили во все эти папки данные.

А теперь, давайте создадим XSLT функцию, при помощи которой мы будем показывать эти ссылки.

четверг, 30 декабря 2010 г.

Использование XSLT-функции на странице

Итак функция Demo.DisplayNews готова. Все что нам осталось сделать - добавить ее на страницу и посмотреть, что получилось.

Преобразование XML в шаблоне XSLT-функции

Функция, вызов которой мы добавили в нашу Demo.DisplayNews, возвращает данные в виде XML, каждый элемент которого представлен примерно так:

Вызов другой функции из XSLT-функции

Каждый раз, когда вы создаете тип данных, С1 автоматически создает несколько функций для работы с этими данными. Одна из этих функций и представляет для нас интерес. Имя этой функции будет состоять из:

Создание XSLT функции

Чтобы создать XSLT-функцию:

Представление данных с помощью XSLT-функций

XSLT-функции занимают одно из центральных мест в C1. О создании и использовании XSLT-функций нужно писать не одно сообщение. В этом же сообщении я ограничусь поставленной целью. У нас есть типа данных Demo.News и нам с помощью XSLT-функции нужно вывести данные из этого типа на страницу.

Создание и использование структурированных данных

Я уже писал, что структурированные данные в C1 хранятся при помощи т.н. "типов данных" (data types или datatypes). Каждый тип данных можно уподобить таблице в базе данных.