UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: wolfman от 18 Мая 2012, 17:20:22

Название: Форма добавления комментариев (xslt)
Отправлено: wolfman от 18 Мая 2012, 17:20:22
Недавно начал вникать в xslt, пробую сделать свой первый шаблон.
Возникла проблема с комментариями.

Сделал все как в итоговом шаблоне справки юми - http://help-dev.umi-cms.ru/chapter.CommentsWithXSLT.files.html
Но как в самом шаблоне вывести форму для добавления комментариев никак не пойму.

Вписывал в свой шаблон такое:

<xsl:apply-templates select="document(concat('udata://comments/insert/', page/@pageId))/udata"  />

В итоге получил только фразу "нет комментариев", но самой формы для добавления комментариев нет.

Еще вопрос по теме - как вывести форму для добавления комментариев и сами комментарии только на какой-то конкретной странице?

Заранее большое спасибо за советы.
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 27 Мая 2012, 01:43:33
на странице http://help-dev.umi-cms.ru/#chapter.CommentsWithXSLT.files.html описываются как добавить форму начиная со строк Форма добавления комментариев а для того чтобы эта форма вставилось вы в исходном месте используете вызов
<xsl:apply-templates select="user"/>
что описано в начале статьи
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 30 Мая 2012, 09:09:43
я добавил в шаблон

<xsl:apply-templates select="user"/>

и убрал свою строку. в итоге вообще пустота. форма не выводиться :(
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 31 Мая 2012, 08:44:55
если у вас есть весь набор шаблонов как тут http://help-dev.umi-cms.ru/chapter.CommentsWithXSLT.files.html и нет своих шаблонов для узла user (которые в малой степени вероятности, но могли перекрыть эти шаблоны)

то у вас все должно получиться, так как вызов <xsl:apply-templates select="user"/>

несомненно обратиться к шаблонам описанным ниже в той ссылке что я привел в начале данного сообщения. Вот они
<xsl:template match="user">
      <xsl:apply-templates select="document(concat('udata://comments/insert/', /result/@pageId))/udata/action"/>
</xsl:template>

<xsl:template match="action">

  <h3><a name="addcomment">Добавить комментарий</a></h3>

  <form method="post" action="{.}" name="form_addcomment" id="form_addcomment">

    <fieldset class="intext">
       <label for="comment_title" id="for_title" title="Заголовок">
         <span>Заголовок:&nbsp;<sup class="asterisk">*</sup></span>
         <input type="text" name="title" id="comment_title" />
       </label>

       <label for="comment_author">
         <span>Ваш ник:</span>
         <input type="text" name="author_nick" id="comment_author" />
       </label>

       <label for="comment_email">
         <span>Ваш e-mail:</span>
         <input type="text" name="author_email" id="comment_email" />
       </label>

       <label for="comment_text" id="for_comment" title="Текст">
        <span>Текст:&nbsp;<sup class="asterisk">*</sup></span>
        <textarea name="comment" id="comment_text" cols="6" />
       </label>
    </fieldset>

    <xsl:apply-templates select="document('udata://system/captcha')/udata[url]" /><!-- utils.xsl -->

    <input class="btt submit-send" type="submit" value="отправить"/>

  </form>

</xsl:template>


<xsl:template match="user[@status = 'auth']">
  <h3><a name="addcomment">Добавить комментарий</a></h3>

  <form method="post" action="/comments/post/{/result/@pageId}/" name="form_addcomment" id="form_addcomment">

    <fieldset class="intext">
      <label for="comment_title" id="for_title" title="Заголовок">
        <span>Заголовок:&nbsp;<sup class="asterisk">*</sup></span>
        <input type="text" name="title" id="comment_title" />
      </label>

      <label for="comment_text" id="for_comment" title="Текст">
        <span>Текст:&nbsp;<sup class="asterisk">*</sup></span>
        <textarea name="comment" id="comment_text" cols="6" />
      </label>
    </fieldset>

    <input class="submit-send" type="submit" value="Отправить"/>

  </form>
</xsl:template>

Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 31 Мая 2012, 09:12:38
У меня есть стандартные шаблоны modules/user (из шаблона магазина юми) и они подключены.

Я пробовал отключать - ничего не изменилось.
Сам код формы комментариев - полностью взят из юми без редактирования.
В шаблон внутренней страницы вставил

<xsl:apply-templates select="user"/>

и ничего. формы нигде не вижу :(
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 31 Мая 2012, 09:37:01
если у вас стандартный demodizzy то для вывода списка шаблонов и формы шаблонов достаточно вызвать <xsl:apply-templates select="document('udata://comments/insert')" /> а так слишком много всяких моментов которые могли сыграть в вашем случае, так как не понятно что было, что вы добавляли и что может быть не так, на словах очень долго можно моделировать в чем может быть загвоздка
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 31 Мая 2012, 10:02:02
Эх. После вставки этой строчки у меня такое огромное количество ошибок посыпалось, что копировать сюда не буду. Только маленький кусочек приведу.
Кажется на рекурсию жалуется в файле с меню:

Warning: XSLTProcessor::transformToXml(): runtime error: file /home/a/a15936/public_html/xsltTpls/modules/content/menu.xsl line 65 element ul in /home/a/a15936/public_html/classes/system/subsystems/umiTemplaters/types/umiTemplaterXSLT.php on line 45 Warning: XSLTProcessor::transformToXml(): xsltApplyXSLTTemplate: A potential infinite template recursion was detected. You can adjust xsltMaxDepth (--maxdepth) in order to raise the maximum number of nested template calls and variables/params (currently set to 3000). in /home/a/a15936/public_html/classes/system/subsystems/umiTemplaters/types/umiTemplaterXSLT.php on line 45 

Странно что ошибка возникла только после вставки
<xsl:apply-templates select="document('udata://comments/insert')" />

Причем с меню кажется все в порядке (сделано по справке юми).
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 31 Мая 2012, 12:20:27
это на дефорлтном шаблоне или вы уже добавляли свои шаблjны, например с документации umi?
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 06 Июня 2012, 19:24:49
Не заметил, что вы отвечали - не пришло оповещение на мэил :(

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

кстати вы выше приводили код для формы. но он покороче чем из справки юми. и когда я его использовал, то моя строка:

<xsl:apply-templates select="document(concat('udata://comments/insert/', page/@pageId))/udata"  />

вместо фразы "нет комментариев" (писал в первом посте) стала выводить форму, только форма дублировалась (т.е. 2 формы одна над другой).

Комментарий через нее можно было добавить - в админке он появлялся ( у меня модерация включена ), но после модерации на сайте их не видно :(
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 06 Июня 2012, 20:15:14
скорее всего у вас получилось наслоение тех шаблонов что вы добавили, на те что были в demodizzy, так что для того чтобы их разделить добавьте какой-нибудь свой mode к вызову apply-templates и далее по цепочке также проставьте mode чтобы знать что другие шаблоны не влияют на конечный вывод
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 06 Июня 2012, 23:18:25
Вы правы, спасибо! Прописал mode и почти все получилось.
Комментарии выводятся.

Только никак не пойму откуда дубликат формы берется. т.е. у меня выводятся 2 формы для добавления комментариев.

код полностью со справки юми. ничего от себя не добавлял. в шаблоне просто строка

 <xsl:apply-templates select="document('udata://comments/insert')" mode="comments" />
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 06 Июня 2012, 23:40:30
проставьте в своих шаблонах какие-нибудь метки, например циферки 1, 2 и т.д. чтобы понять в каких местах начинаются и заканчиваются твои шаблоны, так и разберешься скорее всего
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 07 Июня 2012, 00:02:06
Мне показалось, что проблема в самом начале кода, где список комментариев выводиться.

Цитировать
<xsl:template match="udata[@module = 'comments'][@method = 'insert'][items/item]" mode="comm">
   <xsl:variable name="doc-numpages" select="document(concat('udata://system/numpages/', total, '/', per_page, '/notemplate/p/10'))/udata" />

   <ul class="comments">
      <xsl:apply-templates select="items/item" mode="comm" />
   </ul>

   <!-- paging -->
   <xsl:apply-templates select="$doc-numpages" mode="paging.words" />   <!-- utils.xsl -->
   <xsl:apply-templates select="$doc-numpages" mode="paging.numbers" /> <!-- utils.xsl -->

</xsl:template>

в самом начале я там добавляю mode="comm" и когда это добавлено - формы исчезают. когда убираю - формы появляются. почему так, не подскажете?

на счет двух форм странно тоже.
ответ udata:

Цитировать
<udata module="comments" method="insert" generation-time="0.013477"><items><item id="359" title="тестинг" author_id="421" num="1" xlink:href="upage://359" xlink:author-href="udata://users/viewAuthor/421" publish_time="1338904061">тестинг</item></items><per_page>10</per_page><total>1</total>
<add_form><action>/comments/post/84/</action>
</add_form><action>/comments/post/84/</action>

</udata>
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 07 Июня 2012, 00:07:02
какие еще шаблоны участвуют в выводе списка комментариев и формы для добавления комментария?
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 07 Июня 2012, 11:14:39
В том то и дело, что все в одном файле - comments.xsl, в котором шаблоны из справки юми.
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 07 Июня 2012, 12:33:14
наконец-то из суппорта спустя несколько дней получил ответ. они исправили, но как я не понял. попробую понять.
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 07 Июня 2012, 14:41:28
можно сюда содержимое этого файла
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 07 Июня 2012, 18:40:54
мне кажется тот файл они сами взяли из справки юми да и они так написали.
но вот вызов формы отличается.

у меня было так:

<xsl:apply-templates select="document('udata://comments/insert')" mode="comm" /> 

а они исправили на это:

<xsl:apply-templates select="document(concat('udata://comments/insert/', page/@id))/udata"/>
<xsl:apply-templates select="result/user"/>

в итоге форма есть (не дублируется) и комментарии работают.
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 07 Июня 2012, 18:45:00
кстати, можете пожалуйста подсказать как вывести комментарии только на какой-то одной странице. пока у меня выводиться в шаблоне всех внутренних т.к. для них единый шаблон.
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 07 Июня 2012, 22:33:18
ну как вариант обвернуть вывод комментариев в условный комментарий типа
xsl:if
Название: Re:Форма добавления комментариев (xslt)
Отправлено: wolfman от 28 Июня 2012, 22:05:13
У меня немного необычный (наверное) вопрос. Мне надо в шаблоны данных комментариев добавить новое поле и выводить его под текстом самого комментария. Как это сделать? Я создал новое поле, а какой строкой его вывести на странице с комментариями? Помогите пожалуйста :)
Это я хочу сделать под комментариями поле для ответа, чтобы сделать некую страницу с отзывами.

PS: Хотя по идее комментарии должны быть и так с возможностью древовидного комментирования (для добавления ответов к другим комментариям), но они по умолчанию идут все сплошным списком. Вообще не понимаю, как в xslt сделать древовидные комментарии :)
Название: Re:Форма добавления комментариев (xslt)
Отправлено: Innokentius от 30 Июля 2012, 09:56:38
Вот меня тоже интересует вопрос реализации древовидных комментариев путем XSLT. Меня все время отправляют к примеру кастомного макроса для TPL-шаблонов... Но я не PHP-кодер) Я верстальщик, изучаю UMI.CMS и XSLT) Мне бы мануал)))
Название: Re:Форма добавления комментариев (xslt)
Отправлено: admin от 30 Июля 2012, 20:10:01
судя по официальной документации, древовидные комментарии можно делать только в блогах(у них свои собственные комментарии), хотя надо посмотреть обычные комментарии на предмет того можно ли их исскуственно делать многоуровневыми. То есть комментарий обычный может быть оставлен к странице любого типа. По логике его можно оставить и к другому комментарию.

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

Примерно так:
1. Вызов списка комментариев
<xsl:apply-templates select="document('udata://comments/insert')" />

2. данный список отрабатывается по шаблонам располагаемым в файле (имеется в виду структура demodizzy) /xsltTpls/modules/comments/comments-list.xsl. Попробуем поменять шаблон, который выводит комментарии.
Было:
<xsl:template match="item" mode="comment">
<div class="item" umi:element-id="{@id}" umi:region="row">
<div class="descr" umi:field-name="message" umi:delete="delete" umi:empty="&empty;">
<xsl:value-of select="." disable-output-escaping="yes" />
</div>

<div class="date">
<xsl:apply-templates select="document(@xlink:author-href)" />

<xsl:text> (</xsl:text>
<span umi:field-name="publish_time">
<xsl:call-template name="format-date">
<xsl:with-param name="date" select="@publish_time" />
</xsl:call-template>
</span>
<xsl:text>)</xsl:text>
</div>
</div>
</xsl:template>

стало:
<xsl:template match="item" mode="comment">
<div class="item" umi:element-id="{@id}" umi:region="row">
<div class="descr" umi:field-name="message" umi:delete="delete" umi:empty="&empty;">
<xsl:value-of select="." disable-output-escaping="yes" />
</div>

<div class="date">
<xsl:apply-templates select="document(@xlink:author-href)" />

<xsl:text> (</xsl:text>
<span umi:field-name="publish_time">
<xsl:call-template name="format-date">
<xsl:with-param name="date" select="@publish_time" />
</xsl:call-template>
</span>
<xsl:text>)</xsl:text>
</div>
</div>
<xsl:apply-templates select="document(concat('udata://comments/insert/',@id))" />
</xsl:template>

Должно получиться
Название: Re:Форма добавления комментариев (xslt)
Отправлено: BaceH от 30 Июля 2012, 22:54:24
Цитировать
В модуле Блоги 2.0. есть возможность оставлять комментарии к комментарию. В этой статье будет представлен пример кастомного макроса, который позволяет использовать практически идентичную функциональность в модуле "Комментарии". Пропишем необходимый код в файле /classes/modules/comments/__custom.php, после слов "//TODO: Write here your own macroses":
http://wiki.umisoft.ru/%D0%92%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B8 (http://wiki.umisoft.ru/%D0%92%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B8)