Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Вывод количества объектов в категории. XSLT

Автор idu.kuruРаздел Шаблоны XSLT

Ответов: 6
Просмотров: 4725
Последний ответ 18 Октября 2014, 17:39:24
от idu.kuru
Сортировка по алфавиту в xslt

Автор VladimirРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 4221
Последний ответ 14 Января 2012, 17:25:36
от admin
Не выводятся все теги в xslt

Автор goodprofyРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 3838
Последний ответ 03 Июня 2014, 13:52:04
от goodprofy
webforms & XSLT & модальное окно

Автор graveРаздел JS и AJAX

Ответов: 8
Просмотров: 8564
Последний ответ 13 Июня 2011, 00:41:56
от talanter
Как вывести itemprop="position" content="" в XSLT?

Автор makarov2979Раздел Шаблоны XSLT

Ответов: 0
Просмотров: 1554
Последний ответ 15 Ноября 2018, 09:30:06
от makarov2979

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

*

r1212121212

  • *
  • 11
  • +0/-0
    • Просмотр профиля
Модуль новостей xslt
« : 20 Октября 2013, 17:58:54 »
Нужно добавить ленту новостей - есть два варианта
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>
добавить подключение шаблона ?


*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #1 : 20 Октября 2013, 23:14:48 »
Скорее всего, у вас не совсем верное понимания общего принципа функционирования cms.

Есть админка, в ней вы создаете и храните контент (каталог, ленты новостей, формы обратной связи и т.п.) затем вы их выводите в каком-то виде (для этого используется шаблонизатор xslt или tpl), именно здесь вы определяете что в ленте новостей выводиться картинка для анонса и текст анонса слева от неё и т.п.

А php функции (в терминологии umi - макросы) позволяют вам получить данные, которые вы создали в админке и вывести их по шаблонам, которые вы используете (то есть xslt или tpl шаблоны)

*

r1212121212

  • *
  • 11
  • +0/-0
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #2 : 21 Октября 2013, 01:31:08 »
Спасибо, кое-что стало понятным.

Конкретный пример в админке создал ленту новостей, к ней добавил 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>

« Последнее редактирование: 21 Октября 2013, 01:55:44 от r1212121212 »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #3 : 21 Октября 2013, 09:59:55 »
ок, у вас в админке есть лента новостей, дальше вы выводите её в каком то виде посредством шаблона (тут вам подойдет ссылка http://dev.docs.umi-cms.ru/prakticheskie_primery/lenty_novostej_sredstvami_xslt-shablonizatora/)

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

И для пополнения базовых знаний, посмотрите Вебинар от umihelp.ru: базовый курс по XSLT-шаблонизатору (UMI.CMS)  на umihelp youtube канале

*

r1212121212

  • *
  • 11
  • +0/-0
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #4 : 21 Октября 2013, 13:36:46 »
Прочитал еще раз ссылки (на 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.

Что получается - страница не ломается, но в этом диве выводиться
Цитировать
Ваших прав недостаточно, чтобы совершить это действие.

В чем ошибка?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #5 : 21 Октября 2013, 14:17:15 »
в строчке

<xsl:apply-templates select="document('udata://imports/news/')/udata"/>

вы пытаетесь воспользоваться протоколом udata (почитайте про него в  документации) для того чтобы обратиться к макросу, в вашем случае это макрос news в модуле  imports система не нашла такой модуль и выдала соответствующее сообщение. Для получении информации о новостях надо пользоваться макросом %news lastlist()% (найдите в той же документации) а imports/news у вас появилось (видимо) из-за того что шаблон для вывода новостей вы положили в данный файл, но это абсолютно разные вещи.

P.S.
Цитировать
подклчил это в основном шаблоне , до <xsl:template match="/" > конечно
а вот это совсем не обязательно, более того, самый общий шаблон, обычно, идет выше, более конкретных шаблонов.

*

r1212121212

  • *
  • 11
  • +0/-0
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #6 : 21 Октября 2013, 15:07:37 »
Посмотрел документацию
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>"

Ведь лента новостей есть - что за ошибка?
« Последнее редактирование: 21 Октября 2013, 15:16:38 от r1212121212 »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #7 : 21 Октября 2013, 15:23:34 »
вы опять пытаетесь вызвать якобы существующий макрос content news. Почитайте\посмотрите азы , например http://docs.umi-cms.ru/xslt-umi-devbook/ так как у вас смешиваются воедино, шаблоны, файлы, макросы, xslt и т.д.

*

r1212121212

  • *
  • 11
  • +0/-0
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #8 : 21 Октября 2013, 16:03:27 »
<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  и здесь как то вытягивать ?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #9 : 21 Октября 2013, 18:22:09 »
<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  и здесь как то вытягивать ?

ваш вопрос о том, как получить доступ к доп полям решается либо получением доп полей при вызове макроса (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/makrosy_protokol_udata/#extended), либо в шаблоне, который выводит каждую новость, использовать вызов протокола upage (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/stranicy_protokol_upage/#callOne)

Но думаю что у вас проблема еще и в том чтобы просто вывести список новостей, а это уже вопрос к знаниям xslt

*

r1212121212

  • *
  • 11
  • +0/-0
    • Просмотр профиля
Re:Модуль новостей xslt
« Ответ #10 : 24 Октября 2013, 15:14:52 »
Сделал так
главный шаблон 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 

//так не работет
<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, можно ли  улучшить?