Нужно добавить ленту новостей - есть два варианта
1) через админку (модуль новости)
2) XSLT http://dev.docs.umi-cms.ru/prakticheskie_primery/lenty_novostej_sredstvami_xslt-shablonizatora/
Как правильней делать ? И зачем два варианта( то есть в чем разница)?
И если делать через админку
то как вывести анонсы - например трех последних новостей.
В нужном div-е -> который в основном шаблоне и внутри этого дива на статических страницах выводится контент соответствующих страниц.
<div class="mydiv">
<xsl:value-of select="//property[@name='content']/value" disable-output-escaping="yes" />
</div>
Если страница анонса новостей то этого контента нет (другая страница ).
Но <xsl:value-of select= остается в основном шаблоне - это нормально ?
Как понимаю нужно в <div class="mydiv"></div>
добавить подключение шаблона ?
Спасибо, кое-что стало понятным.
Конкретный пример в админке создал ленту новостей, к ней добавил 5 новостей(у каждой новости анонос с изображением и текст с изображение).
Теперь нужно сформировать страницу с анонсами трех последних новостей.
Анонсы новостей нужно вывести в конкретном div-e
<div class="mydiv">
<xsl:value-of select="//property[@name='content']/value" disable-output-escaping="yes" />
</div>
В этом div-е выводится (на других страницах (в браузере)) текст из других страниц (имеется ввиду страниц сформированных в админки, конечно). А на странице анонса новостей только - аносы этих новостей - в этом же dive.
То есть анонсы нужно вытащить из контента макросами и в формате xslt (используется именно он, не tpl) и вставить в этот div - подключая какой то шаблон?
<div class="mydiv">
<xsl:value-of select="//property[@name='content']/value" disable-output-escaping="yes" />
//что здесь нужно писать
</div>
Прочитал еще раз ссылки (на yuotube смотрел).
файл imports/news.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="result[@module = news]" >
<h2>Новости</h2>
<xsl:value-of select="document(concat('upage://', @id, '.anons'))/udata/property/value" disable-output-escaping="yes" /> <!-- это для анонсов -->
</xsl:template>
</xsl:stylesheet>
подклчил это в основном шаблоне , до <xsl:template match="/" > конечно
<xsl:include href="imports/news.xsl" />
<xsl:template match="/" >
В основно шаблоне в нужном dive пытаюсь вывести
<div class="mydiv">
<xsl:apply-templates select="document('udata://imports/news/')/udata"/>
</div>
Заходим на страницу новостей ( на ней нужно вывести три анонса последних новостей) mysait/pagenews.
Что получается - страница не ломается, но в этом диве выводиться
Ваших прав недостаточно, чтобы совершить это действие.
В чем ошибка?
в строчке
<xsl:apply-templates select="document('udata://imports/news/')/udata"/>
вы пытаетесь воспользоваться протоколом udata (почитайте про него в документации (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/makrosy_protokol_udata/)) для того чтобы обратиться к макросу, в вашем случае это макрос news в модуле imports система не нашла такой модуль и выдала соответствующее сообщение. Для получении информации о новостях надо пользоваться макросом %news lastlist()% (найдите в той же документации) а imports/news у вас появилось (видимо) из-за того что шаблон для вывода новостей вы положили в данный файл, но это абсолютно разные вещи.
P.S.
подклчил это в основном шаблоне , до <xsl:template match="/" > конечно
а вот это совсем не обязательно, более того, самый общий шаблон, обычно, идет выше, более конкретных шаблонов.
Посмотрел документацию
http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/novosti/news_lastlist/#xslt-templating
Изменил код файл news.xml перекинул в другую папку
news.xm
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:umi="http://www.umi-cms.ru/TR/umi"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="result[@module = 'news' and @method = 'item']">
<xsl:value-of select="page//property[@name = 'content']/value" disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="result[@module = 'news' and @method = 'rubric']">
<xsl:apply-templates select="document('udata://news/lastlist')/udata" />
</xsl:template>
<xsl:template match="udata[@module = 'news' and @method = 'lastlist']">
<xsl:apply-templates select="items">
<xsl:with-param name="list-class">
<xsl:text>news-lastlist</xsl:text>
</xsl:with-param>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
default.xsl - шаблон по умолчанию
//в нем
<div class="my">
<xsl:apply-templates select="document('udata://content/news/')/udata"/>
</div>
Если правильно понял
<xsl:apply-templates select="document('udata://content/news/')/udata"/>
принменем шаблон (вызываем можно сказать)
в самом шаблоне проверяем на какой странице вызвали, если новости то что то делаем.
здесь <xsl:apply-templates select="document('udata://news/lastlist')/udata"
должны выводится последние новости.
Сейчас ничего не выводиться, ни ошибки, пустой div.
Что не правильно?
Посмотрел в брузере
mysait/udata/content/news
пишет"<udata module="content" method="news" generation-time="0.041019"><error code="require-more-permissions">Ваших прав недостаточно, чтобы совершить это действие.</error></udata>"
Ведь лента новостей есть - что за ошибка?
<xsl:apply-templates select= "document(concat('udata://news/lastlist/', result/@pageId, '/3'))//item"/>
Вот это верный след, кажется - выводит 21
Скорее всего из
lent_link="/n/">2
lent_link="/n/">1
Это если посмотреть http://umi/udata/news/lastlist/n/.
Как отсуда вытащить аноносы новостей?
<xsl:apply-templates select= "document(concat('udata://news/lastlist/', result/@pageId, '//content/news/3/3'))//item"/>
В шаблоне content/news.xsl и здесь как то вытягивать ?
Сделал так
главный шаблон default.xsl
<div class="mydiv">
<xsl:value-of select="//property[and @type='wysiwyg']/value" disable-output-escaping="yes" />
<xsl:if test="/result/@pageId='11'">
<p>Текст </p>
<xsl:apply-templates select="document('udata://news/lastlist/(/namePageAllNews/)/')//item"/>
</xsl:if>
файл news.xml
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:umi="http://www.umi-cms.ru/TR/umi"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="item">
<xsl:value-of select="document(concat('upage://',@id))/udata/page/properties/group/property[@name='anons']/value" disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
Так выводит и все вроде бы работет, но так ли нужно похорошему делать?
В default.xsl, используется конструкцию <xsl:if (нельзя ли здесь применить
//так не работет
<xsl:template match="result[@pageId='11]" > //в этой строке [quote]compilation error[/quote]
<h2>Новости</h2>
<xsl:apply-templates select="document('udata://news/lastlist/(/namePageAllNews/)/')//item"/>
</xsl:template> -->
И в news.xml, можно ли улучшить?