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

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

*

Armor

  • **
  • 78
  • +0/-0
    • Просмотр профиля
Вывод свойств публикации
« : 06 Мая 2012, 11:28:20 »
Здравствуйте.
Подскажите как вывести url источника, находится он в свойствах публикации новости.
Казалось бы простой макрос, да вот не могу найти его, пичялька прям..(

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Вывод свойств публикации
« Ответ #1 : 27 Мая 2012, 00:59:04 »
зачем макрос, выводи его как и любое свойство у любой страницы, через %data getProperty()% указав id интересующей тебя новости и имя поля которое хочешь вывести, можешь еще и шаблон особый сделать который будет не просто значение поля выводить, а делать его сразу ссылкой

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #2 : 28 Апреля 2013, 11:35:30 »
зачем макрос, выводи его как и любое свойство у любой страницы, через %data getProperty()% .....
 можешь еще и шаблон особый сделать который будет не просто значение поля выводить, а делать его сразу ссылкой

Такой же вопрос для XSLT-шаблонизатора - получается выводить url только в чистом виде  на странице новости примерно как
По материалам: www.domen.ru/articles/page.html

А макрос в news-item.xsl такой вот это выводит:
<p>По материалам: <a href="" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a></p>

Осталось одно только решить, как же в это самое место href="" вставить "www.domen.ru/articles/page.html"
« Последнее редактирование: 28 Апреля 2013, 11:37:10 от Axiomateria »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Вывод свойств публикации
« Ответ #3 : 28 Апреля 2013, 12:40:24 »
а что вам мешает сделать так?
<a href="{.//property[@name = 'source_url']/value}" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a>

p.s. проверив перед этим что поле source_url не пустое, чтобы пустая ссылка не выводилась

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #4 : 28 Апреля 2013, 12:56:35 »
а что вам мешает сделать так?
<a href="{.//property[@name = 'source_url']/value}" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a>

Да, именно так! Спасибо!
Однако я забыл упомянуть один нюанс в своём вопросе: необходимо добавить перед ссылкой на сторонний ресурс текст <xsl:text>По материалам:</xsl:text>
- если добавить этот просто текст перед  макросом <xsl:text>По материалам:</xsl:text>  <a href="{.//property[@name = 'source_url']/value}" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a> то тогда текст будет отображаться и в случае наличии ссылки и её отсутствия.

Тут без шаблона не обойтись видимо и как мне кажется он очень похож на тот шаблон, что в этом же файле выводит данные в виде ссылок на "Похожие новости" как отчасти здесь:
 <xsl:template match="udata[@method = 'related_links' and count(items/item)]">
      <h4>
         <xsl:text>&news-realted;</xsl:text>
      </h4>
      <div class="news-realted">
      <ul>
         <xsl:apply-templates select="items/item" mode="related" />
      </ul>
      </div>
   </xsl:template>

Вот только не понимаю как конкретно это сделать для вывода одного поля "source_url" - есть ли примеры таких решений ?

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #5 : 28 Апреля 2013, 13:29:11 »
Вот смотрю на xml-версию страницы и видя такие строчки
<property id="193" name="source_url" type="string">
<title>URL источника</title><value>http://crowli.ru/index.php/stati.html</value></property>
и интуитивно понимаю ,что ответ на поверхности где-то....
Как в шаблоне вывести заголовок поля в TPL я знаю,  а как сделать то же самое в в XSLT  и где можно переименовать этот самый заголовок поля "URL источника" на "Источник" ?
« Последнее редактирование: 28 Апреля 2013, 13:32:00 от Axiomateria »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Вывод свойств публикации
« Ответ #6 : 28 Апреля 2013, 13:50:00 »
переименовать можно в админке в шаблоне данных, редактируя тип данных "Новость" (только он системный и чтобы система дала вам его редактировать вам необходимо приписать на странице редактирования этого типа данных в адресную строку параметр ?skip-lock=1)

также можно просто поставить проверку на xsl:if (пожалуй самый быстрый в реализации вариант)

<xsl:if test=".//property[@name = 'source_url']/value'">
Источник: <a href="{.//property[@name = 'source_url']/value}" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a>
</xsl:if>

Еще можно вызвать данное поле через apply-templates и написать 2 шаблона для него. Один пустой, второй (с проверкой в атрибуте match наличие value) и сделать там вывод... хотя можно при вызове apply-tempaltes сразу поставить условие, что value должен существовать... так получиться только один шаблон

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #7 : 28 Апреля 2013, 14:36:12 »
также можно просто поставить проверку на xsl:if (пожалуй самый быстрый в реализации вариант)

<xsl:if test=".//property[@name = 'source_url']/value'">
Источник: <a href="{.//property[@name = 'source_url']/value}" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a>
</xsl:if>

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

Может всё-таки этот вариант сделать:
Цитировать
хотя можно при вызове apply-tempaltes сразу поставить условие, что value должен существовать... так получиться только один шаблон
?

Буду очень благодарен, если подскажите пример такого запроса.
« Последнее редактирование: 28 Апреля 2013, 14:47:24 от admin »

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #8 : 28 Апреля 2013, 14:43:53 »
переименовать можно в админке в шаблоне данных, редактируя тип данных "Новость" (только он системный и чтобы система дала вам его редактировать вам необходимо приписать на странице редактирования этого типа данных в адресную строку параметр ?skip-lock=1)

За этот параметр отдельное спасибо!

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Вывод свойств публикации
« Ответ #9 : 28 Апреля 2013, 14:47:32 »
раз белый лист значит где-то ошибка (включите debug в файле confi.ini)/ Скорее всего это из-за лишнего апострофа в той строчке что я написал, вместо
<xsl:if test=".//property[@name = 'source_url']/value'"...
надо

<xsl:if test=".//property[@name = 'source_url']/value">
Источник: <a href="{.//property[@name = 'source_url']/value}" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a>
</xsl:if>

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #10 : 28 Апреля 2013, 15:00:54 »
раз белый лист значит где-то ошибка (включите debug в файле confi.ini)/ Скорее всего это из-за лишнего апострофа в той строчке что я написал...

Вы совершенно правы, я и сам должен быть внимательнее.
Спасибо!


*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #11 : 23 Мая 2013, 16:28:02 »
раз белый лист значит где-то ошибка (включите debug в файле confi.ini)/ Скорее всего это из-за лишнего апострофа в той строчке что я написал, вместо
<xsl:if test=".//property[@name = 'source_url']/value'"...
надо

<xsl:if test=".//property[@name = 'source_url']/value">
Источник: <a href="{.//property[@name = 'source_url']/value}" target="_blank"><xsl:value-of select=".//property[@name = 'source_url']/value" disable-output-escaping="yes" /></a>
</xsl:if>

А как быть если надо сделать тоже самое с целой группой полей, то есть не отображать их без заполнения хотя бы одного из них?
Вот такой вариант не работает, если что: <xsl:if test=".//group[@name = 'linker']/value">

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Вывод свойств публикации
« Ответ #12 : 23 Мая 2013, 20:20:43 »
еще раз, что именно нужно сделать? не выводить поля какой-то группы полей, если хотя бы одно поле из этой группы не заполнено?

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Re:Вывод свойств публикации
« Ответ #13 : 23 Мая 2013, 20:47:18 »
не выводить поля какой-то группы полей, если хотя бы одно поле из этой группы не заполнено?
Да. Именно так и плюс не выводить заголовки полей тоже.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Вывод свойств публикации
« Ответ #14 : 23 Мая 2013, 23:28:40 »
тогда при выводе xml, в которjм выводятся поля, надо указать чтобы выводились property даже для пустых полей, а потом писать xpath условие, которое проверяет что нет ни одного property с пустым value в данной group/

P.S. сейчас под рукой нет доступа посмотреть, но по моему параметр для вывода пустых полей есть в demodizzy в файле /modules/catalog/catalog-view.xsl при обращении к протоколу upage. Он выглядит как-то так: ?show-empty