Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5

Модератор
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Belkin,
В списке инфосистем отредактируйте все ИС и из выпадающего списка укажите правильно узлы структуры, где эти ИС опубликованы, думаю проблема в этом.
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Как я уже писал у меня страница с новостями выводилась с помощью следующего скрипта:

<?
/*if(isset($_POST['add_comment']))
{
   $property['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);
   $result_add_comment = $GLOBALS['InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $property);
}*/

# Отображаем элемент если не было добавления комментария, или результат добавления комментария отрицательный.
if (!isset($_POST['add_comment']) || isset($result_add_comment) && !$result_add_comment)
{
   # Отображаем информационную группу или информационный элемент
   $GLOBALS['InformationSystem']->ShowInformationSystemPageContent(to_int($GLOBALS['InformationSystem_id']), 'СписокЭлементовИнфосистемы', 'ВыводЕдиницыИнформационнойСистемы',$GLOBALS['InformationResult']);
}
?>

Подскажите что могло изменить, что эта конструкция не работает?
Условие срабатывает, а то что внутри нет.
Как вообще работатет эта конструкция? Где можно взять описание?
Смею напомнить, что при переходе еще на 4.1 все работало.
Модератор
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Belkin,
я Вам дал две рекомендации на исправление - указать пути и сменить на типовую, ваше дело выполнять их или нет, но если не выполняете - то о каких далее комментариях может идти речь?! Зачем что-то советовать, если твои советы игнорируются?
Belkin писал(а):
Смею напомнить, что при переходе еще на 4.1 все работало.

Правильно, в 4.0 еще были указаны символьные пути к странице ИС, которые потом были удалены.
Все проблемы из-за невнимательного чтения документации: http://www.hostcms.ru/news/hostcms_3_2_4_to_infinity_4_0/
Цитата:
Для всех информационных систем указать из выпадающего меню узел структуры, к которому они относятся. Строковое указание пути оставлено для совместимости и будет работать до первого редактирования параметров информационной системы. Со следующей версии все строковые пути будут удалены.
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
HostCMS,
Я понял что вы мне рекомендовали.
Только если переделывать XSL то это как мне кажется фактически переделать весь сайт. А еще это усложняется, что я с XSL не очень знаком, можно сказать на ВЫ.
А вот про узел может быть... Сейчас еще раз, наверное 4, попробую произвести переход.
Спасибо за ваше терпение и помощь!
Модератор
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Belkin,
не вижу, чтобы я говорил переделывать XSL. Указываете из списка для типовой и все, еще раз перечитайте мои сообщения, там работы на 5 минут.
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5

Работы на 5 минут, а сижу реально третьи сутки
Вобщем еще раз пошагово и старался тщательно провел смену версий.
Теперь еще лучше заработало Почти приемлемо
Вот пока еще не все ручные действия провел для 5 версии, оставлю на завтра, а то сил нет.
Вот что заметил.
На одной страничке сайта должно быть разбиение на страницы вывода товара, так вот их нет, хотя если в браузере задать номер страницы, то ее выводит.
На сколько я пока разобрался, дело в XSL. а точнее в ее части, отвечающей за формирование страниц.

<!-- ======================================================== -->
<!-- Цикл для вывода строк ссылок -->
<!-- ======================================================== -->

<xsl:template name="for">
        <xsl:param name="i" select="0"/>
        <xsl:param name="n"/>
        <xsl:param name="current_page"/>

        <xsl:if test="$n > $i">
                <!-- Ставим ссылку на страницу-->
                <!--<xsl:if test="$i != $current_page">
                        <a href="/page-{$i}/">
                        <xsl:value-of select="$i+1"/>
                        </a>
                </xsl:if>-->
            <xsl:if test="$i != $current_page">

         <!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
         <xsl:variable name="parent_group_id" select="/document/blocks/parent_group_id" />

         <!-- Определяем группу для формирования адреса ссылки -->
         <xsl:variable name="group_link"><xsl:choose>
            <!-- Если группа не корневая (!=0) -->
            <xsl:when test="$parent_group_id != 0"><xsl:value-of select="/document/blocks//group[@id=$parent_group_id]/fullpath"/></xsl:when>
            <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>

         <!-- Определяем адрес ссылки -->
         <xsl:variable name="number_link"><xsl:choose>
            <!-- Если не нулевой уровень -->
            <xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
            <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>

         <a href="{/document/blocks/url}{$group_link}{$number_link}"><xsl:value-of select="$i+1"/></a>
      </xsl:if>

                <!-- Не ставим ссылку на страницу-->
                <xsl:if test="$i = $current_page">
                        <xsl:value-of select="$i+1"/>
                </xsl:if>

                &#xA0;

                <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
                <xsl:call-template name="for">
                        <xsl:with-param name="i" select="$i + 1"/>
                        <xsl:with-param name="n" select="$n"/>
                        <xsl:with-param name="current_page" select="$current_page"/>
                </xsl:call-template>
        </xsl:if>
</xsl:template>

</xsl:stylesheet>

Завтра буду капать это направление.
Если можете что подсказать, то буду признателен.
И еще раз спасибо за помощь!!!
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Что-то никак не сдвинусь.
Подскажит если это возможно.
Может понадобится весь XSL, выкладываю.
Товары он выдоди, по нужному колличеству на странице, если в строке адреса браузера задать нужную страницу, то тоже переходит отлично.
Но к сожалению нет внизу ссылочек с номерами страниц.

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
      encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />
   
   <xsl:template match="/">
      <xsl:apply-templates/>
   </xsl:template>
   
   <xsl:template match="/document">
      
      
      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>
      
      <!-- Если в находимся корне - выводим название информационной системы -->
      <!--<xsl:if test="blocks/parent_group_id=0">
         <strong><xsl:value-of disable-output-escaping="yes" select="blocks/name"/></strong>
         <xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
      </xsl:if>-->
      
      <!-- Если в находимся в группе - выводим название группы -->
      <xsl:if test="blocks/parent_group_id!=0">
         <div class="bh"><xsl:value-of disable-output-escaping="yes" select=".//group1[@id=$parent_group_id]/name"/></div>
         
         <!-- Путь к группе -->
         <div style="padding-bottom:10px;"><xsl:apply-templates select=".//group[@id=$parent_group_id]" mode="goup_path"/></div>
      </xsl:if>
      
      <!-- Отображение подгрупп данной группы -->
      <!--<ul>
         <xsl:apply-templates select=".//group[@parent_id=$parent_group_id]" mode="groups"/>
      </ul>-->
      
      <!-- ======================================================== -->
      <!-- Отображение записи информационного блока -->
      <!-- ======================================================== -->
      
      <!-- если есть элементы для отображения -->
      <xsl:if test="count(blocks/items/item[item_status=1]) > 0">
         <table width="100%" border="0" cellspacing="0" cellpadding="0">
            <xsl:apply-templates select="blocks/items/item[item_status=1]" />
         </table>
      </xsl:if>
      
      <p>
         <!-- Строка ссылок на другие страницы информационного блока -->
         <xsl:if test="ОтображатьСсылкиНаСледующиеСтраницы=1">
            <xsl:if test="blocks/items/count_items > blocks/items/items_on_page">
               
               <strong>
                  <xsl:call-template name="for">
                     <xsl:with-param name="n" select="blocks/items/count_items div blocks/items/items_on_page"/>
                     <xsl:with-param name="current_page" select="blocks/items/current_page"/>
                  </xsl:call-template>
               </strong>
               
            </xsl:if>
         </xsl:if>
      </p>
      
      <!-- ======================================================== -->
      <!-- Ссылка на архив -->
      <!-- ======================================================== -->
      <xsl:if test="ОтображатьСсылкуНаАрхив=1">
      <p><a href="{blocks/url}">Архив "<xsl:value-of disable-output-escaping="yes" select="blocks/name"/>"</a></p>
      </xsl:if>
   </xsl:template>
   
   
   <!-- ======================================================== -->
   <!-- Шаблон вывода записей -->
   <!-- ======================================================== -->
   <xsl:template match="blocks/items/item">
      
      <xsl:if test="position() != 1">
      <tr><td height="10"></td></tr>
      <tr><td colspan="2" class="line"></td></tr>
      <tr><td height="10px"></td></tr>
      </xsl:if>
      
      
      <!-- Первая ячейка - название и описание товара -->
      <tr><td colspan="2">
      <div class="bh"><xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/></div>   </td></tr>
   <tr><td height="7px"></td></tr>
      <!-- описание товара -->
      <tr>
         
         <td style="padding-top: 0px;" valign="top">
            <xsl:choose>
               <xsl:when test="item_small_image!=''">
                  <xsl:choose>
                     <xsl:when test="item_text!=''">
                        <a href="{item_path}"><img  style="margin-right:10px;" src="{item_image}"/></a>
                     </xsl:when>
                     <xsl:otherwise>
                        <img  style="margin-right:10px;" src="{item_image}"/>
                     </xsl:otherwise>
                  </xsl:choose>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:choose>
                     <xsl:when test="item_text!=''">
                        <a href="{item_path}"><img  style="margin-right:10px;" src="/images/img/nofoto.jpg"/></a>
                     </xsl:when>
                     <xsl:otherwise>
                        <img  style="margin-right:10px;" src="/images/img/nofoto.jpg"/>
                     </xsl:otherwise>
                  </xsl:choose>
               </xsl:otherwise>
            </xsl:choose>
         </td>
         <td valign="top" width="100%" class="text">
            <b><xsl:value-of disable-output-escaping="yes" select="item_name"/></b>
            <div style="padding-top:4px; padding-bottom:4px;">
               <xsl:value-of disable-output-escaping="yes" select="item_description"/>
            </div>
            <xsl:if test="item_text!=''">
               <a href="{item_path}"><img src="/images/img/menu_p.gif" style="margin-left:-2px" align="absMiddle" />подробнее</a>
            </xsl:if>
         </td>
      </tr>
      
      
      <!-- Третья ячейка - цена товара -->
      <!--<td>
         
         <xsl:value-of disable-output-escaping="yes" select="item_propertys/item_property/currency"/>
         
         
         <xsl:value-of disable-output-escaping="yes" select="item_propertys/item_property/price"/>
   </td></tr>-->
</xsl:template>

<!-- ======================================================== -->
<!-- Шаблон выводит рекурсивно ссылки на группы инф. элемента -->
<!-- ======================================================== -->

<xsl:template match="group" mode="goup_path">
   <xsl:variable name="parent_id" select="@parent_id"/>
   
   <xsl:apply-templates select="//group[@id=$parent_id]" mode="goup_path"/>
   
   <xsl:if test="@parent_id=0">
      <a href="{/document/blocks/url}" class="cat"><xsl:value-of disable-output-escaping="yes" select="/document/blocks/name"/></a>
   </xsl:if>
   
   <img src="/images/img/menu_p.gif"/> <a href="{/document/blocks/url}{fullpath}" class="cat"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
</xsl:template>

<!-- ======================================================== -->
<!-- Шаблон выводит ссылки подгруппы информационного элемента -->
<!-- ======================================================== -->
<xsl:template match="group" mode="groups">
   <li>
      <xsl:if test="small_image!=''">
         <a href="{/document/blocks/url}{fullpath}" target="_blank"><img src="{small_image}"/></a>&#xA0;
      </xsl:if>
      <a href="{/document/blocks/url}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a>
   </li>
</xsl:template>

<!-- ======================================================== -->
<!-- Цикл для вывода строк ссылок -->
<!-- ======================================================== -->
<xsl:template name="for">
   <xsl:param name="i" select="0"/>
   <xsl:param name="n"/>
   <xsl:param name="current_page"/>
   
   <xsl:if test="$n > $i">
      <!-- Ставим ссылку на страницу-->
      <!--<xsl:if test="$i != $current_page">
         <a href="/page-{$i}/">
            <xsl:value-of select="$i+1"/>
         </a>
      </xsl:if>-->
      <xsl:if test="$i != $current_page">
         
         <!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
         <xsl:variable name="parent_group_id" select="/document/blocks/parent_group_id" />
         
         <!-- Определяем группу для формирования адреса ссылки -->
         <xsl:variable name="group_link"><xsl:choose>
               <!-- Если группа не корневая (!=0) -->
               <xsl:when test="$parent_group_id != 0"><xsl:value-of select="/document/blocks//group[@id=$parent_group_id]/fullpath"/></xsl:when>
               <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
               <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>
         
         <!-- Определяем адрес ссылки -->
         <xsl:variable name="number_link"><xsl:choose>
               <!-- Если не нулевой уровень -->
               <xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
               <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
               <xsl:otherwise></xsl:otherwise>
         </xsl:choose></xsl:variable>
         
         <a href="{/document/blocks/url}{$group_link}{$number_link}"><xsl:value-of select="$i+1"/></a>
      </xsl:if>
      
      <!-- Не ставим ссылку на страницу-->
      <xsl:if test="$i = $current_page">
         <xsl:value-of select="$i+1"/>
      </xsl:if>
      
      &#xA0;
      
      <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
      <xsl:call-template name="for">
         <xsl:with-param name="i" select="$i + 1"/>
         <xsl:with-param name="n" select="$n"/>
         <xsl:with-param name="current_page" select="$current_page"/>
      </xsl:call-template>
   </xsl:if>
</xsl:template>

</xsl:stylesheet>
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Разобрался!
Просто не вызывается этот блок "for" из-за того что наверное не задано "ОтображатьСсылкиНаСледующиеСтраницы"
В этом часте кода проблема:

      <p>
         <!-- Строка ссылок на другие страницы информационного блока -->
         <xsl:if test="ОтображатьСсылкиНаСледующиеСтраницы=1">
            <xsl:if test="blocks/items/count_items > blocks/items/items_on_page">
              
               <strong>
                  <xsl:call-template name="for">
                     <xsl:with-param name="n" select="blocks/items/count_items div blocks/items/items_on_page"/>
                     <xsl:with-param name="current_page" select="blocks/items/current_page"/>
                  </xsl:call-template>
               </strong>
              
            </xsl:if>
         </xsl:if>
      </p>

Подскажите где и как правельно задать "ОтображатьСсылкиНаСледующиеСтраницы"?
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Напомню у меня динамическая страница с вызовом:

<?
if(isset($_POST['add_comment']))
{
   $property['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);
   $result_add_comment = $GLOBALS['InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $property);
}

# Отображаем элемент если не было добавления комментария, или результат добавления комментария отрицательный.
if (!isset($_POST['add_comment']) || isset($result_add_comment) && !$result_add_comment)
{
   # Отображаем информационную группу или информационный элемент
   $GLOBALS['InformationSystem']->ShowInformationSystemPageContent(to_int($GLOBALS['InformationSystem_id']), 'СписокТоваров', 'ВыводПодробнойИнформацииОТоваре',$GLOBALS['InformationResult']);
}
?>


И настройками:

<?
# ID Информационной системы
$InformationSystem_id=6;

# Количество записей на страницу
$items_on_page=7;

# Создаем экземпляр объекта Информационные системы
$InformationSystem = new InformationSystem();

# Изменяем параметры страницы (заголовок, описание и т.п.)
$InformationResult = $InformationSystem->ShowInformationSystemPageConfig($InformationSystem_id,$items_on_page);
?>

Есть мысль что это должно быть прописано в настройках динамической страницы?
Или нет?
Подскажите как правельно?
#
Re: Переход с HostCMS v 3.2.4 на HostCMS: 5.9.5
Оказалось нужно прописать в самой динамической странице массив $external_propertys  и одно его значение $external_propertys['ОтображатьСсылкиНаСледующиеСтраницы']=1;
В API вызов добавить последним параметром этот массив.
Вот что получилось:

<?

# $external_propertys - внешние параметры, передаваемые в XML
$external_propertys=array();
$external_propertys['ОтображатьСсылкуНаАрхив']=0;
$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы']=1;


if(isset($_POST['add_comment']))
{
$property['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);
$result_add_comment = $GLOBALS['InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $property);
}

# Отображаем элемент если не было добавления комментария, или результат добавления комментария отрицательный.
if (!isset($_POST['add_comment']) || isset($result_add_comment) && !$result_add_comment)
{
# Отображаем информационную группу или информационный элемент
$GLOBALS['InformationSystem']->ShowInformationSystemPageContent(to_int($GLOBALS['InformationSystem_id']), 'СписокТоваров', 'ВыводПодробнойИнформацииОТоваре',$GLOBALS['InformationResult'], $external_propertys);
}
?>

Вроде теперь работатет все. Но еще буду проверять
СпасибоHostCMS за помощь!
Ты реальные вещи советовал, в тот момент когда я готов был уже все бросить.
P.S. На все работы, если непрерывно сидеть за компом у меня ушло 40-45 часов, а общее время 3 суток. Главное результат.

С уважением
    Андрей.
Авторизация