0

我正在使用带有流模块的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 }}

我想获取当前循环项目的 id,然后以流形式使用它来编辑内容。像这样

{{ 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 }}

我希望能够获取 id 值并将其传入

edit_id="ID-VALUE-HERE"

我想这样的事情可能会奏效

edit_id="{{id}}"

但是 lex 解析器正在中断流内部的流。

我不确定是否可以从流中获取值以在子流中使用。有没有办法以某种方式实现这一目标?谢谢

编辑

关于这个问题和使用[segments]

这完全可以使用 url 段作为传递的 id。例如

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

其中[segment_3],在我的情况下,这是流项目的 id。这太棒了。但是,与初始示例的代码一样,它无法使用流id{{ id }}

4

1 回答 1

0
{{ 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 标签更容易。

于 2015-06-11T11:54:57.283 回答