Вывод ИС с сортировкой по дополнительному св-ву

#
Вывод ИС с сортировкой по дополнительному св-ву
Вывожу ИС:

  <?
# Вывод информационных систем
$InformationSystem = new InformationSystem();
$external_propertys=array();
$external_propertys['ОтображатьСсылкуНаАрхив']=1;
$external_propertys['ОтображатьСсылкиНаСледующиеСтраницы']=0;
                        $InformationSystem->ShowInformationSystem(16,false,'СписокЭлементовВыступленияМеню',6, 0,$external_propertys);?>


Есть дополнительное св-во типа ДАТА, как можно вывести ИС с логикой чтобы выводились только элементы c будующей датой, то есть например ситуация "Предстоящие концерты"

Например чтобы понятно было - _luk.com.ua/ru/concerts (слева)

Cпасибо
ку
Модератор
#
Re: Вывод ИС с сортировкой по дополнительному св-ву
compaq,
Ограничения по доп. св-ву см.: http://www.hostcms.ru/api/HostCMS_5/InformationSystem.html#methodShowInformationSystem

Пример конвертация поля дата (права для магазина) см. http://www.hostcms.ru/forums/17/2436/page-2/

Если не получится - напишите.
#
Re: Вывод ИС с сортировкой по дополнительному св-ву
Это сложно? Я просто как бы вам сказать, c api вообще не дружу - не знаю с чего начать даже копать

Я почитал и упал в ужас, сам точно не начну...
ку
Модератор
#
Re: Вывод ИС с сортировкой по дополнительному св-ву
compaq, вот пример фильтрации информационных элементов по доп. свойству типа "Дата". В нем будут получены все информационные элементы, содержащие в доп. свойстве с идентификатором 16 (свойство имеет тип "Дата" дату, больше текущей:

<?php
    $InformationSystem = & singleton('InformationSystem');
    $external_propertys = array();
    $external_propertys['ПоказыватьСсылкиНаДругиеСтраницы'] = 1;
    $property=array();
    $property_id = 16; // Идентификатор доп. свойства типа "Дата"
    // Заполняем первое условие
    $element['type'] = 1;
    $element['property_id'] = $property_id;
    $element['prefix'] = ' AND ';   
    $element['if'] = '!=';   
    $element['value'] = '';     
    $element['sufix']=" AND CONVERT(CONCAT(SUBSTR(information_propertys_items_value, 7, 4), CHAR(45), SUBSTR(information_propertys_items_value, 4, 2), CHAR(45), SUBSTR(information_propertys_items_value, 1, 2)),  DATE) > CURDATE()";
    $property['select'][] = $element;
   
    // Выводим элементы
    $InformationSystem->ShowInformationSystem(1, false, 'СписокЭлементовИнфосистемы', 10, 0, $external_propertys, $property);
?>

#
Re: Вывод ИС с сортировкой по дополнительному св-ву
Ivanov спасибо большое =)
Буду разбираться, строчка $element['sufix']=
здесь наверно самая важная - сформировать запрос.

Я пытаюсь отсортировать данный вывод путем вставки
$property['Order'] = ASC/DESC

тк сейчас выводится возрастанием (по умолчанию я так понимаю) а хотелось бы наоборот



<?php
    $InformationSystem = & singleton('InformationSystem');
    $external_propertys = array();
    $external_propertys['ПоказыватьСсылкиНаДругиеСтраницы'] = 1;
    $property=array();
    $property_id = 16; // Идентификатор доп. свойства типа "Дата"
    $property['Order'] = ' DESC ';
    // Заполняем первое условие
    $element['type'] = 1;
    $element['property_id'] = $property_id;
    $element['prefix'] = ' AND ';  
    $element['if'] = '!=';    
    $element['value'] = '';    
    $element['sufix']=" AND CONVERT(CONCAT(SUBSTR(information_propertys_items_value, 7, 4), CHAR(45), SUBSTR(information_propertys_items_value, 4, 2), CHAR(45), SUBSTR(information_propertys_items_value, 1, 2)),  DATE) > CURDATE()";
    $property['select'][] = $element;
  
    // Выводим элементы
    $InformationSystem->ShowInformationSystem(1, false, 'СписокЭлементовИнфосистемы', 10, 0, $external_propertys, $property);
?>


но нет изменений, а как правильно?
ку
Модератор
#
Re: Вывод ИС с сортировкой по дополнительному св-ву
Для сортировки по убыванию значений доп. свойства типа "Дата" необходимо добавить следующие параметры

$property['OrderField'] = 'CONVERT(CONCAT(SUBSTR(information_propertys_items_value, 7, 4), CHAR(45), SUBSTR(information_propertys_items_value, 4, 2), CHAR(45), SUBSTR(information_propertys_items_value, 1, 2)),  DATE)';

$property['Order'] = 'DESC';
#
Re: Вывод ИС с сортировкой по дополнительному св-ву
спасибо!
ку
#
Re: Вывод ИС с сортировкой по дополнительному св-ву
Ivanov подскажите пожалуйста если вам не трудно - как немного переорганизовать сортировку чтобы элемент выводился так же и в день даты равной указанной в доп-свойстве?

Я обьясню - я делаю анонс концертов и в нашем случае нужно чтобы анонс висел и в день события =)

+ как на xls так же выделить этот сегодняшний анонс?

Вот наш шаблон

<?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 select="/document"/>
   </xsl:template>

   <xsl:template match="/document">

      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>

      <div id="content" class="news">
        <table>
          <tr>
             <th>Дата</th><th>Город</th><th>Клуб/Место</th>
           </tr>
              <xsl:apply-templates select="blocks/items/item[item_status=1]"/>
        </table>
     </div><!-- /content -->
   </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}">
            <xsl:value-of disable-output-escaping="yes" select="/document/blocks/name"/>
         </a>
      </xsl:if>

      <span class="path_arrow">&#x2192;</span>
      <a href="{/document/blocks/url}{fullpath}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </a>
   </xsl:template>

   <!-- ======================================================== -->
   <!-- Шаблон выводит ссылки подгруппы информационного элемента -->
   <!-- ======================================================== -->
   <xsl:template match="group" mode="goups">
      <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}">
            <b>
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </b>
         </a>
      </li>
   </xsl:template>

   <!-- ======================== -->
   <!-- Данные об инф. элементах -->
   <!-- ======================== -->
   <xsl:template match="blocks/items/item">
   <tr>
    <!-- Дата -->
     <td><xsl:call-template  name="date_to_str" >
   <xsl:with-param name="date" select="item_propertys/item_property[@xml_name = 'date']/value"/>
</xsl:call-template></td>
     <!-- Город -->
     <td><xsl:if test="item_propertys/item_property[@xml_name = 'city']/value != ''"><xsl:value-of disable-output-escaping="yes" select="item_propertys/item_property[@xml_name = 'city']/value"/></xsl:if></td>
     <!-- Место -->
     <td><xsl:if test="item_propertys/item_property[@xml_name = 'place']/value != ''"><xsl:value-of disable-output-escaping="yes" select="item_propertys/item_property[@xml_name = 'place']/value"/></xsl:if></td>
   </tr>
   </xsl:template>


   <!-- Вывод даты с месяцем на русском -->
<xsl:template name="date_to_str">
   <xsl:param name="date" select="date"/>

   <xsl:variable select="substring-after($date, '.')" name="month_postfixDate" />
   <xsl:variable select="substring-before($month_postfixDate, '.')" name="month" />

   <xsl:value-of select="number(substring-before($date, '.'))"/>&#160;<xsl:choose>
      <xsl:when test="$month = 1">января</xsl:when>
      <xsl:when test="$month = 2">февраля</xsl:when>
      <xsl:when test="$month = 3">марта</xsl:when>
      <xsl:when test="$month = 4">апреля</xsl:when>
      <xsl:when test="$month = 5">мая</xsl:when>
      <xsl:when test="$month = 6">июня</xsl:when>
      <xsl:when test="$month = 7">июля</xsl:when>
      <xsl:when test="$month = 8">августа</xsl:when>
      <xsl:when test="$month = 9">сентября</xsl:when>
      <xsl:when test="$month = 10">октября</xsl:when>
      <xsl:when test="$month = 11">ноября</xsl:when>
      <xsl:otherwise>декабря</xsl:otherwise>
   </xsl:choose>
</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 &gt; $i">
         <!-- Ставим ссылку на страницу-->
         <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}" class="page_link">
               <xsl:value-of select="$i + 1"/>
            </a>
         </xsl:if>

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

         <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
         <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>


Спасибо вам большое!
ку
Авторизация