Динамической переменной динамическое значение

Тема в разделе "ExpressionEngine", создана пользователем mbumba, 30 апр 2010.

Статус темы:
Закрыта.
  1. mbumba

    mbumba

    Регистр.:
    11 апр 2007
    Сообщения:
    233
    Симпатии:
    36
    Извиняюсь если это уже где-то проскакивало, но при беглом поиске ничего не нашел.
    Если делать так как написано в мануале, то все в порядке и все работает.
    Код:
    {assign_variable:rid="{segment_1}"}
    {rid}
    
    Но если мне нужно сохранить например id выведенной записи, то капздец. Не фурычит.
    Код:
    {exp:weblog:entries weblog='blogrecords' dynamic='off' limit='1'}
    {assign_variable:rid="{entry_id}"}
    {/exp:weblog:entries}
    {rid}
    
    Может кто знает как получить например entry_id выведенной записи вне конструкции {exp:weblog:entries}?
     
  2. xcss

    xcss Постоялец

    Регистр.:
    22 окт 2009
    Сообщения:
    67
    Симпатии:
    23
    {segment_1} - Глобальная переменная блога и переопределить ее или присвоить ее значение другой - глобальной переменной шаблона не получится никак :(
    Для того, чтобы получить те или иные значения записи вне exp:weblog:entries по текущему сегменту (сегментам) и без использования exp:query существуют многочисленные плагины...
    Ну а если вам все же в итоге нужно решить задачу, подобную этой:
    http://eeclub.ru/forum/viewreply/8565/ - напишите импровизированный роутер в индексном шаблоне нужной вам группы шаблонов и подключайте туда все, что вам нужно в зависимости от необходимых условий и состояния строки URL...
     
  3. mbumba

    mbumba

    Регистр.:
    11 апр 2007
    Сообщения:
    233
    Симпатии:
    36
    Очевидно вы просто невнимательно прочитали.
    Мне не надо переопределять segment_1. Я говорю что такое присвоение работает (значение segment_1 присвоить динамической переменной rid). Не получается присвоить динамической переменной rid значение entry_id из секции {exp:weblog:entries}.
    Не подкините ли ссылочку на плагины такого рода?
    Это мой пост, там описывается та же задача что и здесь.
    Общий "роутер", как вы его называете, как раз и описан в index, но мне то как раз нужно получить значение не в index а в одном из внедряемых шаблонов, и значение это будет использоваться в этом же шаблоне.

    http://eeclub.ru/docs/templates/globals/assign_variable.html - исходя из этого вроде как должно работать, но не работает.
    Возможно ответ почему это не работает в фразе "Этот тег, один из самых первых тегов, обрабатываемых в шаблоне, так как он используется для назначения переменных внутри тегов EE".
    Вопрос к знатокам: как тогда обойти эту проблему и вынести из секции {exp:weblog:entries} динамическую переменную с динамическим значением?
     
  4. Николай

    Николай Постоялец

    Регистр.:
    4 дек 2006
    Сообщения:
    92
    Симпатии:
    21
    Откровенно не понятна задача.. можете объяснить "на пальцах".. что конкретно необходимо сделать ?
     
  5. xcss

    xcss Постоялец

    Регистр.:
    22 окт 2009
    Сообщения:
    67
    Симпатии:
    23
    Не вижу никаких препятствий для парсинга данных переменных сборным шаблоном...
    Или вы считаете - вами придумано кое-что, что никогда никому не доводилось решать?
     
  6. mbumba

    mbumba

    Регистр.:
    11 апр 2007
    Сообщения:
    233
    Симпатии:
    36
    Нет, я так не считаю.
    Но в основном решения которые приводились связаны с использованием прямых SQL запросов, либо через другие избыточные методы.

    В общем случае, задача сводится к:
    Вывести значение entry_id вне секции {exp:weblog:entries} в том же шаблоне в той же обработке парсером.


    ИМХО, самое логичное в данной ситуации использовать динамические переменные. Но увы, так не работает. Очевидно парсер обрабатывает эти переменные до обработки всего шаблона.
    Результат - такая конструкция не дает необходимого результата и вместо вывода значения выводит строку "{entry_id}".
    Код:
    {exp:weblog:entries weblog='blogrecords' dynamic='off' limit='1'}
    {assign_variable:my_var="{entry_id}"}
    {/exp:weblog:entries}
    {my_var} {!-- выведет просто текстовую строку "{entry_id}", но не цифровое значение --}
    
    Решения которые использовались до сих пор - это повторное использование секции {exp:weblog:entries} или использование прямых SQL запросов.
    При помощи конструкции {assign_variable} мне к сожалению не удалось это сделать.
    Как посоветовали в клубе, можно использовать плагин для работы с сессиями, но этот способ позволит передать динамическую переменную для следующего раза, когда будет обрабатываться этот (или другой) шаблон. Аналогом было бы передавать например через POST.
    Может кто-то использовал для решения аналогичной задачи иные (кроме указанных 3-х) способы?
     
  7. xcss

    xcss Постоялец

    Регистр.:
    22 окт 2009
    Сообщения:
    67
    Симпатии:
    23
    Давайте все по порядку:
    A. По какому критерию вам нужно получить entry_id?
     
  8. mbumba

    mbumba

    Регистр.:
    11 апр 2007
    Сообщения:
    233
    Симпатии:
    36
    Это не совсем критерий - мини алгоритм:
    если segment_2==NULL, то вывести последнюю запись в блоге;
    если segment_2!=NULL, тогда запись, где entry_id=segment_2;
    в другой части шаблона подсветить выведенную запись в списке всех записей.


    самым логичным было бы использовать {assign_variable}, как в шаблонах SMARTY, но тут такой подход не сработал.
     
  9. xcss

    xcss Постоялец

    Регистр.:
    22 окт 2009
    Сообщения:
    67
    Симпатии:
    23
    В таком случае в группе должно быть как минимум три шаблона:
    1. index - не отображает ничего, содержит логику, которая позволяет вставлять (инклюдить, подключать) другие шаблоны в зависимости от состояния строки URL.

    2. entry - подключается к индексному шаблону в случае segment_2!=NULL.
    Выводит единственную запись при помощи конструкции exp:weblog:entries,
    используя в качестве критерия выборки значение segment_2.

    3. last_entry - подключается к индексному шаблону в случае segment_2=NULL.
    Выводит единственную запись при помощи конструкции exp:weblog:entries, использую в качестве критерия дату записи или ее entry_id (max значение для указанного в параметрах названия блога).

    Подсветить текущую запись в списке без использования доп. запросов можно только для шаблона entry.
     
  10. mbumba

    mbumba

    Регистр.:
    11 апр 2007
    Сообщения:
    233
    Симпатии:
    36
    Ну собственно так и работает, кроме пункта 3. Не вижу смысла создавать дополнительный шаблон, если все решает +1 дополнительное условие.
    Пока писал ответ в голову пришла идея как можно подсветить запись для шаблона last_entry.
    Может кому-то пригодиться.
    Достаточно в нем создать для списка записей не одну конструкцию exp:weblog:entries, а две.
    В первой конструкции (с лимитом=1) как раз и будет подсвечиваться запись.
    Во второй конструкции (используя offset="1") будут выведены все записи начиная со следующей.
    Это некий средний вариант без использования дополнительных sql запросов или дополнительных проверок в конструкции exp:weblog:entries
     
Статус темы:
Закрыта.