Получение идентификатора из потока в цикле для использования в форме редактирования pyrocms

Я использую pyrocms с модуль потоков для циклического просмотра контента

{{ streams:gallery}}

<div class="col-lg-3 col-md-4 col-sm-4">
    <a href="#">
        <div class="ratio" style="background:url({{gallery_images:image}})"></div>
    </a>
    <div class="text-center">
        <h5>{{title}}</h5>
    </div>
</div>

<!-- FORM CODE BELOW WILL GO HERE USING THE GALLERY STREAM -->

{{ /streams:gallery }}

Я хотел бы получить идентификатор текущего зацикленного элемента, а затем использовать его в форме потока для редактирования содержимого. Вот так

{{ if user:logged_in }}
{{ streams:form stream="gallery" mode="edit" edit_id="1" include="page_image|deschtml"}}
{{ form_open }}

<span class="click-to-edit">
    <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span> Edit
</span>
<span class="inline-edit">

    {{ error }}
    {{ page_image:input }}
    {{ deschtml:input }}
    {{ form_submit }}

    <button class="inline-close pull-right" type="button">Cancel</button>
</span>
{{ form_close }}
{{ /streams:form }}
{{ endif }}

Я хочу иметь возможность получить значение идентификатора и передать его

edit_id="ID-VALUE-HERE"

Я подумал, что что-то вроде этого может работать

edit_id="{{id}}"

но синтаксический анализатор lex ломается внутри потока, который находится внутри потока.

Я не уверен, можно ли получить значения из потока для использования в дочернем потоке. Есть ли способ добиться этого как-то? Спасибо

ИЗМЕНИТЬ

Относительно этой проблемы и использования [segments]

Это работает полностью с использованием сегментов URL-адресов в качестве передаваемого идентификатора. Например

{{ streams:form stream="custom_details" mode="edit" edit_id="[segment_3]" include="page_image|deschtml"}}

где [segment_3] , в моем случае это идентификатор элемента потока. Это потрясающе. Однако, как и в коде для исходного примера, он не будет работать с потоками id или {{ id }}.


person Community    schedule 10.06.2015    source источник
comment
откуда должен браться этот идентификатор? у вас есть еще один потоковый вызов, обернутый вокруг вашей формы?   -  person mgrueter    schedule 11.06.2015
comment
Да, это будет паровая галерея. Я обновил свой вопрос, чтобы лучше отразить это   -  person    schedule 11.06.2015


Ответы (1)


{{ streams:form stream="custom_details" mode="edit" edit_id=id include="page_image|deschtml" }}

должно сработать.

См. раздел Документация по тегам PyroCMS — Использование тегов и переменных в параметрах тегов для получения дополнительной информации.

Как правило, вы можете опустить фигурные скобки, если используете переменную в качестве параметра тега или вызываете плагин без каких-либо параметров.

// Обновить

Вот пример реализации использования пользовательского плагина для обхода проблем с вызовами вложенных тегов:

создайте новый плагин в addons/shared_addons/plugin с именем «customplugin.php»

код:

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Plugin_Customplugin extends Plugin {

    public function galeryform()
    {
        $id = $this->attribute('galeryid', false);

        if( ! $id ) {
            return;
        }

        return $this->theme_view('partials/galery_form', array('galeryid' => $id), true);
}

создайте папку «partials» в папке вашей темы и добавьте «galery_form.html», который содержит разметку для вашей формы потока:

{{ streams:form stream="custom_details" mode="edit" edit_id=galeryid include="page_image|deschtml"}}
[ ... and the rest of your markup ... ]

замените код формы в макете/представлении галереи вызовом плагина:

{{ customplugin:galeryform galery_id=id }}

Вы, конечно, можете изменить имя плагина, просто убедитесь, что имя класса соответствует имени файла + префикс «Plugin_», и соответствующим образом измените вызов плагина.

Почти всегда проще работать с пользовательскими плагинами, чем с вложенными тегами lex.

person mgrueter    schedule 11.06.2015
comment
Я не получаю ошибку. Однако я получаю callback_blocks_b8e565f2ee9fc49390dca68a3f64360f, за исключением первой записи, которая работает как надо. Может быть вы знаете, в чем может быть дело? - person ; 11.06.2015
comment
ах да, LEX не очень хорош, когда дело доходит до вложенных вызовов. Дайте мне время, чтобы нарисовать пример с использованием плагина. - person mgrueter; 11.06.2015