Форум - Показ последних сообщений

#
Re: Форум - Показ последних сообщений
Исходя из документации http://www.hostcms.ru/documentation/modules/forum/last-messages/
вывод последних сообщений форума полностью настроить так и не удалось.

ТДС:

Цитата:

<?php
/**
* Показ последних сообщений форума.
*
* <code>
* $oForum = Core_Entity::factory('Forum', 1);
*
* $Forum_Last_Posts_Show = new Forum_Last_Posts_Show(
*    $oForum
* );
*
* $Forum_Last_Posts_Show
*    ->xsl(
*       Core_Entity::factory('Xsl')->getByName('ПоследниеСообщенияФорума')
*    )
*    ->show();
* </code>
*
* @package HostCMS 6\Forum
* @version 6.x
* @author Hostmake LLC
* @copyright © 2005-2017 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
*/
class Forum_Last_Posts_Show extends Core_Controller
{
    /**
     * Allowed object properties
     * @var array
     */
    protected $_allowedProperties = array(
       'limit',
    );

    protected $_forumTopicPosts = NULL;

    /**
     * Constructor.
     * @param Forum_Model $oSiteuser user
     */
    public function __construct(Forum_Model $oForum)
    {
       parent::__construct($oForum->clearEntities());

       $this->limit = 1;

      $this->_forumTopicPosts = Core_Entity::factory('Forum_Topic_Post');
      $this->_forumTopicPosts
       ->queryBuilder()
       ->select('forum_topic_posts.*')
       ->join('forum_topics', 'forum_topics.id', '=', 'forum_topic_posts.forum_topic_id')
       ->join('forum_categories', 'forum_categories.id', '=', 'forum_topics.forum_category_id')
       ->join('forum_groups', 'forum_groups.id', '=', 'forum_categories.forum_group_id')
       ->where('forum_groups.forum_id', '=', $oForum->id)
       ->where('forum_groups.deleted', '=', 0)
       ->where('forum_categories.deleted', '=', 0)
       ->where('forum_topics.deleted', '=', 0)
       ->clearOrderBy()
       ->orderBy('forum_topic_posts.datetime', 'DESC')
       ->limit($this->limit);
    }

    public function forumTopicPosts()
    {
       return $this->_forumTopicPosts;
    }

    /**
     * Show built data
     * @return self
     */
    public function show()
    {
       $oForum = $this->getEntity();

       $aForum_Topic_Posts = $this->_forumTopicPosts->findAll(FALSE);
      
       foreach ($aForum_Topic_Posts as $oForum_Topic_Post)
       {
           $this->addEntity(
             $oForum_Topic_Post
             ->clearEntities()
             ->showXmlSiteuser(TRUE)
             ->addEntity(
         $oForum_Topic_Post->Forum_Topic
            ->clearEntities()
            ->showXmlFirstPost(FALSE)
            ->showXmlLastPost(FALSE)
                )
          );
       }
      if (!empty($aCategories)) {
           $this->addEntities($aCategories);
         }
       return parent::show();
    }
}
?>


У меня XSL немного другой, нежели в приведенном примере документации:

Цитата:

   <xsl:template match="/forum">
      <xsl:apply-templates select="forum_topic_post" />
   </xsl:template>
   
   <xsl:template match="forum_topic_post">
      <div class="block block-side-nav last">
         <div class="block-title">
            <strong>
            <i class="fa fa-wechat"></i><span>Последние сообщения</span>
            </strong>
         </div>
         <div class="block-content">
            <dt>
               <a href="{/forum/url}{/forum/forum_category/@id}{forum_topic/@id}/">
                  <xsl:value-of select="datetime"/>
               </a>
            </dt>
            <dd>
               <xsl:value-of disable-output-escaping="yes" select="text"/>
            </dd>
            <p class="user">
               <img src="/images/user.png" />
               <span><xsl:value-of select="siteuser/login"/></span>
            </p>
         </div>
      </div>
   </xsl:template>
</xsl:stylesheet>


Вот XML:
Цитата:

<forum id="2">
   <structure_id>441</structure_id>
   <user_id>19</user_id>
   <site_id>2</site_id>
   <name>Форум</name>
   <description>Форум</description>
   <topics_on_page>10</topics_on_page>
   <posts_on_page>10</posts_on_page>
   <flood_protection_time>1</flood_protection_time>
   <allow_edit_time>3600</allow_edit_time>
   <allow_delete_time>1800</allow_delete_time>
   <url>/forums/</url>
   <total_topics>3</total_topics>
   <total_topic_posts>2</total_topic_posts>
   <total_siteusers>3</total_siteusers>
   <forum_topic_post id="6">
      <siteuser_id>9</siteuser_id>
      <ip>31.23.259.74</ip>
      <subject>Форум</subject>
      <forum_topic_id>8</forum_topic_id>
      <deleted>0</deleted>
      <datetime>15.10.2017 19:09:14</datetime>
      <original_text>Форум</original_text>
      <text>Форум</text>
      <allow_delete>1</allow_delete>
      <allow_edit>1</allow_edit>
      <forum_topic id="8">
         <forum_category_id>10</forum_category_id>
         <visible>1</visible>
         <announcement>0</announcement>
         <closed>0</closed>
         <user_id>19</user_id>
         <new_posts>1</new_posts>
         <count_posts>1</count_posts>
         <subscribed>0</subscribed>
         <allow_add_post>1</allow_add_post>
      </forum_topic>
      <siteuser id="9">
         <site_id>2</site_id>
         <login>user</login>
         <email>@mail.ru</email>
         <name></name>
         <surname></surname>
         <patronymic></patronymic>
         <company></company>
         <phone></phone>
         <fax></fax>
         <website></website>
         <icq></icq>
         <country></country>
         <postcode></postcode>
         <city></city>
         <address></address>
         <ip>31.23.259.74</ip>
         <guid>37976B05-9839-423F-B539-35CD63EF211D</guid>
         <active>1</active>
         <user_id>19</user_id>
         <deleted>0</deleted>
         <dir>/upload/users/0/0/9/</dir>
         <datetime>10.10.2017 06:03:18</datetime>
         <date>10.10.2017</date>
      </siteuser>
   </forum_topic_post>
</forum>


Такой вариант выводит неправильную ссылку в последним сообщением форума. В ссылке пропускает категорию.

Настраивал как показано в предыдущих постах этой ветки.

ТДС:
Цитата:

<?php
/**
* Показ последних сообщений форума.
*
* <code>
* $oForum = Core_Entity::factory('Forum', 1);
*
* $Forum_Last_Posts_Show = new Forum_Last_Posts_Show(
*    $oForum
* );
*
* $Forum_Last_Posts_Show
*    ->xsl(
*       Core_Entity::factory('Xsl')->getByName('ПоследниеСообщенияФорума')
*    )
*    ->show();
* </code>
*
* @package HostCMS 6\Forum
* @version 6.x
* @author Hostmake LLC
* @copyright © 2005-2013 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
*/
class Forum_Last_Posts_Show extends Core_Controller
{
    /**
     * Allowed object properties
     * @var array
     */
    protected $_allowedProperties = array(
       'limit',
    );

    protected $_forumTopicPosts = NULL;

    /**
     * Constructor.
     * @param Forum_Model $oSiteuser user
     */
    public function __construct(Forum_Model $oForum)
    {
       parent::__construct($oForum->clearEntities());

       $this->limit = 1;

      $this->_forumTopicPosts = Core_Entity::factory('Forum_Topic_Post');
      $this->_forumTopicPosts
       ->queryBuilder()
       ->select('forum_topic_posts.*')
       ->join('forum_topics', 'forum_topics.id', '=', 'forum_topic_posts.forum_topic_id')
       ->join('forum_categories', 'forum_categories.id', '=', 'forum_topics.forum_category_id')
       ->join('forum_groups', 'forum_groups.id', '=', 'forum_categories.forum_group_id')
       ->where('forum_groups.forum_id', '=', $oForum->id)
       ->where('forum_groups.deleted', '=', 0)
       ->where('forum_categories.deleted', '=', 0)
       ->where('forum_topics.deleted', '=', 0)
       ->clearOrderBy()
       ->orderBy('forum_topic_posts.datetime', 'DESC')
       ->limit($this->limit);
    }

    public function forumTopicPosts()
    {
       return $this->_forumTopicPosts;
    }

    /**
     * Show built data
     * @return self
     */
         public function show() {  
         $aCategories = array();
         $oForum = $this->getEntity();

         $aForum_Topic_Posts = $this->_forumTopicPosts->findAll(FALSE);

         foreach ($aForum_Topic_Posts as $oForum_Topic_Posts)
         {
           $aCategories[] = $oForum_Topic_Posts->forum_topic->forum_category;
           $this->addEntity(
             $oForum_Topic_Posts->clearEntities()
               ->showXmlSiteuser(TRUE)                
           );
           $oForum_Topic_Posts->addEntity(
               Core::factory('Core_Xml_Entity')->name('forum_category_id')->value($oForum_Topic_Posts->forum_topic->forum_category->id)
           );
         }
         if (!empty($aCategories)) {
           $this->addEntities($aCategories);
         }
         return parent::show();
      }

}
?>


XSL прежний.

Вот такой получается XML:
Цитата:

<forum id="2">
   <structure_id>441</structure_id>
   <user_id>19</user_id>
   <site_id>2</site_id>
   <name>Форум</name>
   <description>Форум</description>
   <topics_on_page>10</topics_on_page>
   <posts_on_page>10</posts_on_page>
   <flood_protection_time>1</flood_protection_time>
   <allow_edit_time>3600</allow_edit_time>
   <allow_delete_time>1800</allow_delete_time>
   <url>/forums/</url>
   <total_topics>3</total_topics>
   <total_topic_posts>2</total_topic_posts>
   <total_siteusers>3</total_siteusers>
   <forum_topic_post id="6">
      <siteuser_id>9</siteuser_id>
      <ip>31.23.259.74</ip>
      <subject>Форум</subject>
      <forum_topic_id>8</forum_topic_id>
      <deleted>0</deleted>
      <datetime>15.10.2017 19:09:14</datetime>
      <original_text>Форум</original_text>
      <text>Форум</text>
      <allow_delete>1</allow_delete>
      <allow_edit>1</allow_edit>
      <forum_category_id>10</forum_category_id>
      <siteuser id="9">
         <site_id>2</site_id>
         <login>user</login>
         <email>@mail.ru</email>
         <name></name>
         <surname></surname>
         <patronymic></patronymic>
         <company></company>
         <phone></phone>
         <fax></fax>
         <website></website>
         <icq></icq>
         <country></country>
         <postcode></postcode>
         <city></city>
         <address></address>
         <ip>31.23.259.74</ip>
         <guid>37976B05-9839-423F-B539-35CD63EF211D</guid>
         <active>1</active>
         <user_id>19</user_id>
         <deleted>0</deleted>
         <dir>/upload/users/0/0/9/</dir>
         <datetime>10.10.2017 06:03:18</datetime>
         <date>10.10.2017</date>
      </siteuser>
   </forum_topic_post>
   <forum_category id="10">
      <forum_group_id>12</forum_group_id>
      <name>Форум</name>
      <description>Форум</description>
      <closed>1</closed>
      <sorting>0</sorting>
      <email>@mail.ru</email>
      <postmoderation>1</postmoderation>
      <visible>1</visible>
      <use_captcha>1</use_captcha>
      <user_id>19</user_id>
      <allow_guest_posting>0</allow_guest_posting>
      <count_topics>2</count_topics>
      <count_topic_posts>2</count_topic_posts>
      <new_posts>0</new_posts>
      <forum_topic id="8">
         <forum_category_id>10</forum_category_id>
         <visible>1</visible>
         <announcement>0</announcement>
         <closed>0</closed>
         <user_id>19</user_id>
         <new_posts>1</new_posts>
         <count_posts>1</count_posts>
         <subscribed>0</subscribed>
         <allow_add_post>1</allow_add_post>
         <last>
            <forum_topic_post id="6">
               <siteuser_id>9</siteuser_id>
               <ip>31.23.259.74</ip>
               <subject>Форум</subject>
               <forum_topic_id>8</forum_topic_id>
               <deleted>0</deleted>
               <datetime>15.10.2017 19:09:14</datetime>
               <original_text>Форум</original_text>
               <text>Форум</text>
               <allow_delete>1</allow_delete>
               <allow_edit>1</allow_edit>
               <siteuser id="9">
                  <site_id>2</site_id>
                  <login>user</login>
                  <email>@mail.ru</email>
                  <name></name>
                  <surname></surname>
                  <patronymic></patronymic>
                  <company></company>
                  <phone></phone>
                  <fax></fax>
                  <website></website>
                  <icq></icq>
                  <country></country>
                  <postcode></postcode>
                  <city></city>
                  <address></address>
                  <ip>31.23.259.74</ip>
                  <guid>37976B05-9839-423F-B539-35CD63EF211D</guid>
                  <active>1</active>
                  <user_id>19</user_id>
                  <deleted>0</deleted>
                  <dir>/upload/users/0/0/9/</dir>
                  <datetime>10.10.2017 06:03:18</datetime>
                  <date>10.10.2017</date>
               </siteuser>
            </forum_topic_post>
         </last>
      </forum_topic>
   </forum_category>
</forum>


Такой вариант перенаправляет на категорию, а не на пост.

Подскажите пожалуйста решение.

И еще вопрос по XSL:
Цитата:

<xsl:value-of select="datetime"/>

Какое значение поставить в select="" чтобы ссылка была не в виде даты, а названием поста?
Как ограничить текст сообщения?
Модератор
#
Re: Форум - Показ последних сообщений
на странице http://www.hostcms.ru/documentation/modules/forum/last-messages/ ссылка на страницу темы формируется следующим образом:
        <!-- Дата и время -->
        <a href="{forum_topic/url}">
            <xsl:value-of select="datetime"/>
        </a>

у вас устаревшая версия системы, в связи с чем путь нужно формировать:
<a href="{/forum/url}{/forum/forum_category/@id}/{forum_topic_id}/">
Авторизация