Pyrocms标记为另一个标记中的参数

时间:2012-09-18 09:37:30

标签: tags pyrocms

我尝试在我的页面中使用{{page:slug}}作为参数来获取同名类别的博客文章。例如:

  • Pagename =关于我
  • Slug = about-me

然后在Blog中创建一个具有相同名称和slugname的类别以及相关文章。现在在页面布局中,我认为我可以创建以下内容,但它似乎不起作用。有谁知道为什么不呢?

{{ blog:posts order-by="created_on" dir="asc" category="{{ page:slug }}" }}
<section class="title">
    <h4>
    {{ title }}
    </h4>
</section>
<section class="item">
    <p>{{ intro }}</p>
    <p><a href="{{ url }}">Read more..</a></p>
</section>
{{ /blog:posts }}

解决

我通过与另一位开发人员面对面地找到了答案。由于这是一种模板语言,因此它不支持功能。它只是读取预先制作的变量。所以我将不得不通过在pages / plugins.php中创建另一个方法来解决这个问题。

3 个答案:

答案 0 :(得分:3)

您无需尝试在字符串中嵌入标记,只需将标记直接传递给属性即可。

{{ blog:posts order-by="created_on" dir="asc" category="{{ page:slug }}" }}

应该是:

{{ blog:posts order-by="created_on" dir="asc" category=page:slug }}

比你想象的容易吗?

答案 1 :(得分:1)

这就是我用PHP解决它的方法。以下编辑检查是否设置了{{blog:posts}}标记中的页面参数。如果是,它抓取最后一个段并将其用作数据库查询中的类别过滤器,仅检索那些帖子:

system / cms / modules / blog / plugin.php 中查找“posts”功能并添加参数:

$page   = $this->attribute('page');

然后使用以下语句检查参数是否已设置,然后添加“where”语句:

if($page) //check if page is set
{
  $segment = end($this->uri->segment_array()); //get the last segment from the url
  $this->db->where('blog_categories.slug', $segment); //use the segment as filter
}

现在您可以创建一个包含博客帖子的页面,其中类别引用其页面名称,例如:www.website.com/pagename/subpagename/subsubpagename/awesome然后将其用作pagelayout,它将加载一个博客帖子列表那些“很棒”的类别:

<h3>{{ page:title }}</h3>
{{ blog:posts order-by="created_on" dir="asc" page="true" }}


    <h4>{{ title }}</h4>

    <p>
        {{ intro }}</p>
    <p>
        <a href="{{ url }}">Read more..</a></p>

{{ /blog:posts }} 

答案 2 :(得分:0)

我没有使用标签,而是找到了一个简单的解决方案来尽可能地避免使用标签。就这个。

而不是使用标签调用插件中的视图并将第三个参数传递为TRUE,以便它返回字符串而不是加载视图,而不是像使用php o course那样在视图中进行任何类型的循环和条件检查。不需要在那里见到标签。在插件中调用此视图后,只需返回一个变量,并在页面中的标签中使用变量来显示视图内容。
这是一个例子

class Plugin_Home extends Plugin  
{  
    function test()  
    {
        $this->load->model('test/test_m');
        $data['test']   =   $this->test_m->index();
        return $this->load->view('test/test_view',$data , TRUE);
    }
}   

在页面中,您可以像这样称呼它

{{ Home:test }}

摆脱用于调节和循环的标签