UMIhelp

Разработка сайта на UMI.CMS => Настройка системы и модулей => Тема начата: Seweryss от 03 Октября 2013, 22:19:59

Название: Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 03 Октября 2013, 22:19:59
Доброго дня уважаемое сообщество. Столкнулся с проблемой: нужно чтобы на одной страничке были все комментарии, а на другой - только определенное число (3 например).
Вычитал, что в шаблоне макроса comments_insert, а именно в разделе comments_block,  есть макрос который оперирует выводом количество страниц (%per_page%). Только я не могу его настроить, вернее не могу понять как им пользоваться вообще. Помогите пожалуйста.
В админке настроено, что 10 комментов на странице, но мне нужно, чтобы на главной, выводилось только 3, а на странице отзывов все 10.

Очень нужна помощь. Надеюсь только на Вас.
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 03 Октября 2013, 23:41:42
Друзья, помогите пожалуйста =( Больше некого спросить.
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: e.ioffe от 04 Октября 2013, 11:55:44
Думаю, проще написать свой usel вида:

<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">{1}</category>
</target>

    <limit page="0">{limit}</limit>
</selection>

Допустим, файл, описывающий usel, называется getComments.xsl, тогда его вызов будет таким: usel://getComments/[id раздела, комментарии которого показывать]/?limit=[количество комментариев, которые показывать]
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 04 Октября 2013, 16:39:16
Я очень признателен за помощь, но, к сожалению, использую tpl шаблонизатор, до еще xls еще не дорос. Может как - то можно решить эту задачу на tpl?  Или никак?
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: admin от 04 Октября 2013, 18:09:19
попробуйте все же usel запрос работая через data doSelection() макрос (см. подробнее в документации (http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/shablony_dannyh/data_doselection/))

а xml usel файла вам уже написали выше он вполне подойдет с небольшим изменением
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">{1}</category>
</target>

    <limit page="{3}">{2}</limit>
</selection>

В итоге, если ваш xml файл называется comments_usel, а езд шаблон для обработки результатов comments_usel_tpl, то вызов макроса будет выглядеть так:
%data doSelection(comments_usel_tpl,comments_usel,[id_страницы__комментариями],[количество_комментариев_выводимых_на_странице],[номер_страницы_с_комментариями])%

Например, вывод комментариев со страницы с id = 99:
1. вывод первых 3 комментариев: %data doSelection(comments_usel_tpl,comments_usel,99,3)%
2. вывод следующих 3 комментариев (с 4 по 6): %data doSelection(comments_usel_tpl,comments_usel,99,3,1)%
3. вывод всех комментариев (схитрим подставив заранее большое число комментариев во второй параметр): %data doSelection(comments_usel_tpl,comments_usel,99,1000000)%
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 04 Октября 2013, 19:48:32
Спасибо Вам огромное за Вашу помощь. Буду пробовать.
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 15 Октября 2013, 20:38:30
К сожалению не работает.
%data doSelection(comments,comments_usel,77,2)%   это вызов

это   usel
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">{1}</category>
</target>

    <limit page="{2}">{1}</limit>
</selection>

а здесь обработчик который находится в tpls/data/usel

<?php

$FORMS = Array();


$FORMS['comments_block'] = <<<COMMENT_BLOCK
<div class="right_column">
%lines%
</div>


COMMENT_BLOCK;

$FORMS['comments_block_line'] = <<<COMMENT_LINE_USER


<div class="right_column">
<div class="image_title" ><img src="../../images/img/ava.png"/></div>
<div class="coment_text">
<div class="comment_text" umi:element-id="%id%" umi:field-name="message" umi:delete="delete">
%message%
</div>     
</div>
<div class="name">%nickname%</div>

<div class="firma" umi:element-id="%id%" umi:field-name="firma" >%firma%</div>

</div>
COMMENT_LINE_USER;


?>

Вроде бы все правильно сделал, как Вы и говорили, только вот оно ничего не выводит, к сожалению. Можете подсказать, что я не так сделал? Буду очень и очень признателен. Заранее спасибо.
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: e.ioffe от 15 Октября 2013, 20:44:33
Ошиблись в usel - вместо <limit page="{2}">{1}</limit> должно быть <limit page="{3}">{2}</limit>
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 15 Октября 2013, 20:55:05
Спасибо за ответ. Да, я знаю, только теперь требуют выводить только 2 комментария. Проблема в другом, мне кажется, что шаблон ТПЛ (который отвечает за обработку данных) я неправильно оформил. Только мои попытки вставить, что-то другое, ничего хорошего не дают.

П.С. Я так думаю потому что макрос вывода срабатывает (не пишет, что не найден шаблон) но ничего не выводит, абсолютно.

Друзья, помогите пожалуйста, очень нужна помощь. Очень важный момент.

П.П.С. я уже пробовал в тпл файле менять названия блоков-обработчика, вот так:
<?php

$FORMS = Array();

$FORMS['elements_block'] = <<<END
<p>Elements list (%total%/%per_page%)</p>
<ul>
%items%
</ul>
END;

$FORMS['elements_block_line'] = <<<END
<div class="image_title" ><img src="../../images/img/ava.png"/></div>
<div class="coment_text">
<div class="comment_text" umi:element-id="%id%" umi:field-name="message" umi:delete="delete">
%message%
</div>    
</div>
<div class="name">%nickname%</div>

<div class="firma" umi:element-id="%id%" umi:field-name="firma" >%firma%</div>
END;

?>
Показывает только: Element list (2\77) - т.е. что- то оно видит, но, полей коментов (имени, фирмы и т.д.) нет  :(

Неужели нет идей? Ребята, помогите, пожалуйста. Пополню моб. на 200 руб (или больше, если захотите) за помощь. Просто позарез нужна помощь.
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: admin от 17 Октября 2013, 01:42:11
Явно что проблема где-то в мелочи, для того чтобы сказать что именно у вас не так привидите здесь

1. пример вызова макроса %data doSelection()% (чтобы видеть какие параметры вы передаете)
2. содержимое xml файла, который вы используете в данном data doSelection() макросе
3. содержимое tpl шаблона, который вы используете в данном data doSelection() макросе
4. html код блока, внутри которого, должен выводиться результат работы %data doSelection()% макроса

Как выглядит шаблон для вывода комментариев, который уже работает? (скорее всего это tpl файл /tpls/comments/default.tpl)
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Vladimir от 17 Октября 2013, 12:44:24
Если передавали как написано %data doSelection(comments,comments_usel,77,2)%, то для начала попробуйте  все строковые параметры заключить в апострофы
%data doSelection('comments','comments_usel',77,2)%

Если не поможет, в блок шаблона elements_block  поставьте какой-нибудь  текст, чтобы увидеть, что у вас вообще-то выбрался именно ваш шаблон.

Если шаблон ваш, значит, просто нет выборки, т.е., ошибка в usel
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 17 Октября 2013, 16:18:37
Спасибо за оперативные ответы. Предоставляю файлы:
1:  %data doSelection(default,comments_usel,77,2)%
2: XML файл:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">{1}</category>
</target>

    <limit page="{2}">{1}</limit>
</selection>
3: TPL файл обработки запроса
<?php
$FORMS = Array();

$FORMS['elements_block'] = <<<END
<p>Elements list (%total%/%per_page%)</p>
<div class="right_column">
<div>%message%</div>
%items%

</div>
END;

$FORMS['elements_block_line'] = <<<END

<div class="image_title" ><img src="../../images/img/ava.png"/></div>
<div class="coment_text">
<div class="comment_text" umi:element-id="%id%" umi:field-name="message" umi:delete="delete">
%message%
</div>     
</div>
<div class="name">%nickname%</div>
<div class="firma" umi:element-id="%id%" umi:field-name="firma" >%firma%</div>
%id%

END;
?>

4:
<div class="message">
<div class="title_coment">Отзывы</div>
%data doSelection(default,comments_usel,77,2)%
</div>

П.С. Срабатывает только эта часть TPL файла: <p>Elements list (%total%/%per_page%)</p>   (выводит: Elements list (2/77) ) значит, что оно нашло 2 элемента удовлетворяющих запрос. Но вот всё что находится в блоке, который формирует Items - игнорируется. Не могу понять в чём проблема.

Vladimir, спасибо за реакцию: Я уже пробовал, проблема в том, что вроде бы работает, но, наполовину. Не выводит поля страницы (текст, автор, фирма и т.д.).
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: admin от 17 Октября 2013, 17:14:53
вы забыли выложить html того, что получается в итоге. конечно мне не нужна весь исходный код страницы, а только того места где должны выводиться комментарии
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 17 Октября 2013, 17:43:08
Не так Вас понял вначале. Наверное должно быть так?  (Это то, что получается в конце). Если, что -то нужно еще - говорите, предоставлю всё что потребуется, только бы решить проблему.
<div class="super_middle_wrapper">
<div id = "middle_wrapper">
<div class="mid_sub">
<div id="zamanuha_wrapper">
<div class="zagolov">Оборудование для кафе б/у</div>
</div>
<p>Elements list (2/77)</p>
<div class="right_column">
<div>%message%</div>
</div>
</div>
</div>
</div>
</div>
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Vladimir от 18 Октября 2013, 12:21:47
Посмотрите, пожалуйста,  документацию по макросу doSelection.  Какие переменные допустимо использоваться внутри блоков elements_...? А какие у вас? 

Возьмите блоки со страницы
http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/shablony_dannyh/data_doselection/#tpl-templating
и попробуйте с типовыми получить список комментариев.

проблема, конечно, остается - я бы ожидал, что хотя бы неполно, но все же комментарии бы вывелись, но у вас переменная %items% не отработала совсем. М.б., это из-за %message%. Давайте исключим все нестандартное для начала.
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Vladimir от 18 Октября 2013, 12:25:29
И опять:  %data doSelection(default,comments_usel,77,2)%  - строковые параметры заключаются в апострофы. Это имеет значение. Мы никогда не найдем ошибку, если не будем постепенно исключать все возможные, даже пусть в принципе, узкие места.

Вы же помните, что за data doSelection скрывается обычная php-функцияdata::doSelection, для которой 'default' - это строка default, а default - это необъявленная константа default
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Vladimir от 18 Октября 2013, 12:28:53
Кстати, было бы неплохо включить полный вывод ошибок в config.ini
екция [debug] — Настройки режима отладки
enabled = "1"
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: admin от 18 Октября 2013, 12:36:47
Спасибо за оперативные ответы. Предоставляю файлы:
1:  %data doSelection(default,comments_usel,77,2)%
2: XML файл:
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">{1}</category>
</target>

    <limit page="{2}">{1}</limit>
</selection>

при вызове %data doSelection(default,comments_usel,77,2)%  у вас получитсья запрос вида
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">77</category>
</target>

    <limit page="2">77</limit>
</selection>

то есть вы будете пытаться получить комментарии из раздела с id = 77 в количистве по 77 комментариев на страницу и хотите вывести 2 страницу результатов, врядли у вас в данном разделе есть 78 и более комментариев, поэтому система не выводит ни одного item используя шаблон в блоке $FORMS['elements_block_line'] = <<<END

так что исправьте ошибку в своем usel шаблоне, как вам уже указывали выше
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">{1}</category>
</target>

    <limit page="{3}">{2}</limit>
</selection>

и вызов сделайте так %data doSelection(default,comments_usel,77,2)%, при отсутствующем  3м параметре (то есть номере страницы результатов) система примет его равным 1.

P.S. и для тестинга не забывайте проверять все по частям. Например, для того чтобы исключить возможность того, что ошибка в результатах выборки, сделайте вызов того же usel файла через адресную строку таким образом /usel/comments_usel/77/2 и вы получите туже выборку что и при вызове макроса %data doSelection(default,comments_usel,77,2)%, только в xml виде

P.P.S. У вас может не хватит прав на просмотр результатов выборке через http протокол, о том как это изменить можно найти в документации по usel протоколу (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/vyborki_iz_bd_protokol_usel/)
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 18 Октября 2013, 16:40:14
Дорогие Admin и Vladimir - сделал все как вы говорили и заработало. Друзья, я безумно счастлив. Я безуспешно бился над этим вопросом больше недели. Ошибка была в неверном XML запросе. (Но на всякий и в кавычках написал как Владимир говорил).  Примите мои безграничные благодарности. Всего наилучшего Вам.
Я безгранично рад, что все работает. Сам виноват - не понимал толком структуру запросов (если честно - даже сейчас, когда Вы все разжевали и мне, дураку, показали - не особо разбираюсь в этом вопросе).


У меня еще 1 маленький вопросик, а можно сделать так, чтобы выводились всегда последние комментарии? Оно, кажется, статично выводит 2 первых. (Я прошу прощения за то что достаю всех, итак очень Вам благодарен за Вашу помощь, потраченное время и усилия на меня) Но может можно как-то это сделать?
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Aisamiery от 18 Октября 2013, 18:17:26
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="comments" method="comment" />
        <category depth="1000">{1}</category>
</target>

    <limit page="{3}">{2}</limit>
    <sort order="descending">updatetime</sort>
</selection>

Последние(относительно) комменты для umi 2.9.x для младших не знаю
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 18 Октября 2013, 19:05:30
Aisamiery: Спасибо тебе добрый человек :) сработало. Зазубрю это все до костей. Очень помог.
Название: Re:Ограничить вывод комментариев на некоторых страницах
Отправлено: Seweryss от 18 Октября 2013, 19:06:29
Дорогие друзья. Спасибо Вам огроменное за помощь, Ваше время и внимание. Это так здорово, что у нас есть такие замечательные люди. Всего наилучшего Вам и всех всех благ.