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

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

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Пытаюсь задействовать в шаблоне тура "Ссылка на дерево" в таком смысле, что бы в туре (объекте каталога) выводилась на сайте не просто ссылка на другой объект каталога, а сразу подгружалось превью другого объекта каталога.

Конкретно так: есть тур в котором кроме текстового краткого описания надо подгрузить информацию о днях этого тура через "Ссылка на дерево", то есть в редактировании объекта каталог "Тур" ссылка на дерево подгружает не ссылку на описание дня, а сразу выводит в этом туре по своему шаблону данные этого дня в виде текстового описания.

С подгрузкой фотоальбома через "Ссылка на дерево" это получается и выводится так:
<xsl:apply-templates select="document(concat('udata://photoalbum/album/', //property[@name = 'photoslist']/value/page/@id,'/void/1000'))/udata" mode="tovar_photo_list"/>  

Я попробовал по образу и подобию сделать так:
<xsl:apply-templates select="document(concat('udata://catalog/object/', //property[@name = 'days_program']/value/page/@id,'/void/1000'))/udata" mode="object-view-tours-day"/>

где days_program поле "Ссылка на дерево", но не работает она...

Что порекомендуете в таком случае ?
« Последнее редактирование: 02 Июля 2013, 03:52:11 от Axiomateria »

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
udata://catalog/object/', //property[@name = 'days_program']/value/page/@id,'/void/1000'))/udata а что у вас выводится через адрессную строку, если посмотреть, и подставить соответствующий ид?

что у вас в шаблоне с mode="object-view-tours-day" ?

Цитировать
Что порекомендуете в таком случае ?
читать литературу!

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
что у вас в шаблоне с mode="object-view-tours-day" ?

В этом шаблоне вот такое содержание:

   <xsl:template match="/result[@module = 'catalog' and @method = 'object' and page/@type-id=141]">
      <xsl:apply-templates select="document(concat('upage://', page/@id,'?show-empty'))/udata" mode="object-view-tours-day" />
   </xsl:template>

   <xsl:template match="udata" mode="object-view-tours-day">                                         
                              <xsl:apply-templates select=".//group[@name = 'day_schedule']" mode="dayinfo-1-tour" />                       
   </xsl:template>   
     
    <xsl:template match="group" mode="dayinfo-1-tour">
     <table cellpadding="0" cellspacing="0">
      <tr valign="top">
        <td class="borderdown">       
           <xsl:apply-templates select="property" disable-output-escaping="yes" mode="dayinfo-1-tour" />        
        </td>
       </tr>
      </table>   
     </xsl:template>   
   <xsl:template match="property" mode="dayinfo-1-tour">   
          <xsl:value-of select="value" disable-output-escaping="yes" mode="dayinfo-1-tour" />   
     </xsl:template>

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
udata://catalog/object/', //property[@name = 'days_program']/value/page/@id,'/void/1000'))/udata а что у вас выводится через адрессную строку, если посмотреть, и подставить соответствующий ид?

В файле xml такое содержимое по этому макросу имеется:

<group id="407" name="days_from_programs">
<title>
Дни для этой программы
</title>
<property id="437" name="days_program" type="symlink">
<title>
Дни программы
</title>
<value>
<page id="112" parentId="110" link="/prefabricated_tours_to_st_petersburg_for_individual_tourists/stolica_rossijskoj_imperii/den_1/" is-active="1" object-id="699" type-id="141" update-time="1372716668" alt-name="den_1" xlink:href="upage://112">
<basetype id="55" module="catalog" method="object">
Объекты каталога
</basetype>
<name>
День 1
</name>
</page>
<page id="113" parentId="110" link="/prefabricated_tours_to_st_petersburg_for_individual_tourists/stolica_rossijskoj_imperii/den_2/" is-active="1" object-id="700" type-id="141" update-time="1372714913" alt-name="den_2" xlink:href="upage://113">
<basetype id="55" module="catalog" method="object">
Объекты каталога
</basetype>
<name>
День 2
</name>
</page>
<page id="114" parentId="110" link="/prefabricated_tours_to_st_petersburg_for_individual_tourists/stolica_rossijskoj_imperii/den_3/" is-active="1" object-id="701" type-id="141" update-time="1372714922" alt-name="den_3" xlink:href="upage://114">
<basetype id="55" module="catalog" method="object">
Объекты каталога
</basetype>
<name>
День 3
</name>
</page>
</value>
</property>
</group>
« Последнее редактирование: 02 Июля 2013, 11:41:38 от Axiomateria »

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
udata://catalog/object/', //property[@name = 'days_program']/value/page/@id,'/void/1000'))/udata

первую строчку покажите, пожалуйста

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
udata://catalog/object/', //property[@name = 'days_program']/value/page/@id,'/void/1000'))/udata

первую строчку покажите, пожалуйста

Да я бы рад показать, да только пока вот не пойму, что конкретно Вам необходимо...
Первая строчка в шаблоне mode="object-view-tours-day"  нужна ?

На всякий случай полное содержание файла с шаблоном mode="object-view-tours-day" такое :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM   "ulang://i18n/constants.dtd:file">

<xsl:stylesheet   version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:umi="http://www.umi-cms.ru/TR/umi">

   <xsl:template match="/result[@module = 'catalog' and @method = 'object' and page/@type-id=141]">
      <xsl:apply-templates select="document(concat('upage://', page/@id,'?show-empty'))/udata" mode="object-view-tours-day" />
   </xsl:template>

   <xsl:template match="udata" mode="object-view-tours-day">                                          
                              <xsl:apply-templates select=".//group[@name = 'day_schedule']" mode="dayinfo-1-tour" />
                        <div class="clear"></div>                
   </xsl:template>    

    <xsl:template match="group" mode="dayinfo-1-tour">
     <table cellpadding="0" cellspacing="0">
      <tr valign="top">
        <td class="borderdown">        
           <xsl:apply-templates select="property" disable-output-escaping="yes" mode="dayinfo-1-tour" />        
        </td>
       </tr>
      </table>    
   </xsl:template>   
   <xsl:template match="property" mode="dayinfo-1-tour">    
        <div class="text2"><xsl:value-of select="value" disable-output-escaping="yes" mode="dayinfo-1-tour" /></div>      
   </xsl:template>      

</xsl:stylesheet>

« Последнее редактирование: 02 Июля 2013, 13:41:41 от Axiomateria »

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
 <xsl:template match="group" mode="dayinfo-1-tour">
     <table cellpadding="0" cellspacing="0">
      <tr valign="top">
        <td class="borderdown">       
           <xsl:apply-templates select="property" disable-output-escaping="yes" mode="dayinfo-1-tour" />       
        </td>
       </tr>
      </table>   
   </xsl:template>   
   <xsl:template match="property" mode="dayinfo-1-tour">   
        <div class="text2"><xsl:value-of select="value" disable-output-escaping="yes" mode="dayinfo-1-tour" /></div>     
   </xsl:template>       
вы работаете с групой, а вам нужно шаблон для каждой  page


*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
вы работаете с групой, а вам нужно шаблон для каждой  page

Я попробовал подкорректировать шаблон и он стал выводить каркас таблицы, то есть ту таблицу, которая есть в другом объекте каталога. Но содержание текстовое и всякое прочее пока не подгружается....
Попробовал вывести через вызов <xsl:apply-templates select="." /> и в следствии опять-таки выводятся  только ссылки на объекты, вместо ожидаемых их превьюшек. Вот на данный момент шаблон в таком состоянии:

     <xsl:template match="page" mode="dayinfo-1-tour">
     <table cellpadding="0" cellspacing="0">
      <tr valign="top">
        <td class="t1" width="28">              
           <img src="{$template-recources}images/ic.png" />
        </td>
        <td class="borderdown">        
           <xsl:apply-templates select="." />      
        </td>
       </tr>
      </table>    
   </xsl:template>   

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
   <xsl:apply-templates select="." />
вместо этого нужно вызвать upage/@id, и потом доставать информацию о картинках и прочем

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
   <xsl:apply-templates select="." />
вместо этого нужно вызвать upage/@id, и потом доставать информацию о картинках и прочем

Почитав руководство  http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/stranicy_protokol_upage/  и попробовав вместо <xsl:apply-templates select="." />  такие варианты вызова, как:

            <xsl:value-of select="document(concat('upage://', @id, '.'))//value" disable-output-escaping="yes" />
            <xsl:value-of select="document('upage://@id')//value" disable-output-escaping="yes" /> 

по прежнему пребываю в тупике... ничего не выводится

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Пытаюсь задействовать в шаблоне тура "Ссылка на дерево" в таком смысле, что бы в туре (объекте каталога) выводилась на сайте не просто ссылка на другой объект каталога, а сразу подгружалось превью другого объекта каталога.

Конкретно так: есть тур в котором кроме текстового краткого описания надо подгрузить информацию о днях этого тура через "Ссылка на дерево", то есть в редактировании объекта каталог "Тур" ссылка на дерево подгружает не ссылку на описание дня, а сразу выводит в этом туре по своему шаблону данные этого дня в виде текстового описания.

С подгрузкой фотоальбома через "Ссылка на дерево" это получается и выводится так:
<xsl:apply-templates select="document(concat('udata://photoalbum/album/', //property[@name = 'photoslist']/value/page/@id,'/void/1000'))/udata" mode="tovar_photo_list"/> 

Я попробовал по образу и подобию сделать так:
<xsl:apply-templates select="document(concat('udata://catalog/object/', //property[@name = 'days_program']/value/page/@id,'/void/1000'))/udata" mode="object-view-tours-day"/>

где days_program поле "Ссылка на дерево", но не работает она...

Что порекомендуете в таком случае ?

слишком много телодвижений за один шаг, делайте все постепенно.

1. вывести на странице товара "тур" id страницы, выбранной в поле "ссылка на дерево" (поле = 'days_program'). Поместим id страницы из поля "ссылка на дерево" в переменную, чтобы все было наглядней и выведем её
<xsl:variable name="days_program_page_id" select="//property[@name = 'days_program']/value/page/@id" />
проверяем id:<xsl:value-of select="$days_program_page_id" />

2. Дальше проверяем получается ли у нас вытянуть информацию по страницы с таким id.
<xsl:variable name="days_program_page" select="document(concat('upage://',$days_program_page_id))/udata" />

для проверки выведем xml код данного запроса используя copy-of <xsl:copy-of select="$days_program_page" /> Данный код виден только если вы просматриваете html код получившейся страницы, в браузере он не виден (или виден лишь частично).

и в финале пытаемся вывести поле (пусть это поле картинка с name = 'photo') из этой страницы
<xsl:value-of select="$days_program_page//property[@name='photo']/value" />

P.S. для начала удостоверитесь что предыдущий copy-of отобразил данную информацию в xml или проверьте тоже самое вбив в адресной строке /upage/53, где 53 это id который получили в переменную $days_program_page_id


p.p.s код не проверял, так что могут быть мелкие орф. ошибки))

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
1. вывести на странице товара "тур" id страницы, выбранной в поле "ссылка на дерево" (поле = 'days_program'). Поместим id страницы из поля "ссылка на дерево" в переменную, чтобы все было наглядней и выведем её
<xsl:variable name="days_program_page_id" select="//property[@name = 'days_program']/value/page/@id" />
проверяем id:<xsl:value-of select="$days_program_page_id" />

- получилось, но только выводится один ID страницы "112", когда как у меня изначально три страницы подключены через "Ссылка на дерево".ещё "113" и "114".


2. Дальше проверяем получается ли у нас вытянуть информацию по страницы с таким id.
<xsl:variable name="days_program_page" select="document(concat('upage://',$days_program_page_id))/udata" />
для проверки выведем xml код данного запроса используя copy-of <xsl:copy-of select="$days_program_page" /> Данный код виден только если вы просматриваете html код получившейся страницы, в браузере он не виден (или виден лишь частично).

- тоже получилось, выводится вся информация с одной подключённой странице с ID "112"

и в финале пытаемся вывести поле (пусть это поле картинка с name = 'photo') из этой страницы
<xsl:value-of select="$days_program_page//property[@name='photo']/value" />

тоже сработало и выводится информация уже из каждого поля, например "День недели" с идентификатором "day_week" <xsl:value-of select="$days_program_page//property[@name='day_week' and not(property/value='')]/value" />

В итоге получается вывести информация только про один первый день тура, когда как есть ещё два дня того же тура, которые подгружаются только в том случае, если первый или предыдущий день отключен/удалён.

И ещё уточнение, как сделать так что бы не подгружать поля по отдельности, как вот так пока получается:
                         <xsl:value-of select="$days_program_page//property[@name='day_week' and not(property/value='')]/value" />
                         <xsl:value-of select="$days_program_page//property[@name='day_content' and not(property/value='')]/value" disable-output-escaping="yes" />                         
                         <xsl:value-of select="$days_program_page//property[@name='day_transport' and not(property/value='')]/value" />

а выводить данные сразу всей группы, если группа полей с идентификатором "day_schedule" ?
Я попробовал вот так вывести:
 <xsl:value-of select="$days_program_page//group[@name='day_schedule']/value" />
но ни чего не вышло пока...

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Axiomateria ,  это базовые примеры работы с xslt

xsl:value-of выводит только одно значение (если их несколько, то первое из списка), даже если в атрибуте select был указан путь, который подходит для нескольких узлов (например <xsl:value-of select="//property" />)

xsl:apply-templates выводит все узлы, которые соответствуют xpath, указанному в атрибуте select. И выводит он их по какому-то шаблону.


То есть, в вашем случает, надо через xsl:apply-templates перебрать все значения которые есть в поле "ссылка на дерево", а в шаблоне, по которому будут выводиться данные значения обращаться к upage и вытягивать то что вам надо.

Получиться примерно так:

1. перебрать на странице товара "тур"  все страницы, выбранные в поле "ссылка на дерево" (поле = 'days_program'). Поместим список страниц из поля "ссылка на дерево" в переменную, чтобы все было наглядней, и выведем её:
<xsl:variable name="days_program_pages" select="//property[@name = 'days_program']/value/page" />

2. переберем все полученые страницы (даже если там одна страница все равно переберем)
<xsl:apply-templates select="$days_program_pages" mode="days_program_pages"/>

3. напишем отдельный шаблон для этого вызова в котором будем обращаться к upage протоколу и вытягивать поле photo
<xsl:templates match="page" mode="days_program_pages">
<xsl:variable name="page_info" select="document(concat('upage://',$days_program_page_id))/udata" />
<xsl:value-of select="$page_info//property[@name='photo']/value" />
</xsl:templates>


P.S. для вывода полей группы вам также понадобиться apply-templates
<xsl:apply-templates select="$days_program_page//group[@name='day_schedule']/property" mode="property_value_template"/>

и отдельный шаблон
<!--основной шаблон для всех property-->
<xsl:templates match="property" mode="property_value_template" />
<!--уточняющий шаблон для всех property со значением-->
<xsl:templates match="property[value]" mode="property_value_template">
<xsl:value-of select="title" />:<xsl:value-of select="value" />
</xsl:templates>

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Спасибо, admin. буду осваивать всё выше сказанное.

*

Axiomateria

  • ****
  • 319
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Попробовал варианты из последней рекомендации и ни чего не получилось вообще вывести...

А вот когда-то (примерно год назад) я ещё на TPL сайты строил и через "Ссылку на дерево" как-то запросто получилось сделать вот такое под заголовком "С этим товаром покупают" :
http://www.superhomemarket.ru/catalog_bed_linen/sets_of_bed-clothes_from_100_silk/art_inb-109-16_nabor_postel_nogo_bel_ya_s_odeyalom_iz_100_naturalnogo_shelka/artikul_inb_109_16/

помню совсем чуть-чуть в дефолтном шаблоне каталога покумекал и всё просто получилось...
« Последнее редактирование: 05 Июля 2013, 18:17:32 от Axiomateria »