Тег Pyrocms как параметр в другом теге

Я попытался использовать {{ page:slug }} в качестве параметра на своей странице, чтобы получить статьи блога из одноименной категории. Например:

  • Имя страницы = Обо мне
  • Слаг = обо мне

Затем создайте категорию с таким же названием и псевдонимом в блоге со связанными статьями. Теперь в макетах страниц я думал, что смогу создать следующее, но, похоже, это не работает. Кто-нибудь знает, почему нет?

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


person Chris Visser    schedule 18.09.2012    source источник
comment
Смотрите мой ответ, вы сделали немного неправильное резюме в своем решенном тексте.   -  person Phil Sturgeon    schedule 02.10.2012


Ответы (3)


Вам не нужно пытаться вставлять тег в строку, просто передайте тег прямо в атрибут.

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

Должно быть:

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

Легче, чем ты думал, эй?

person Phil Sturgeon    schedule 02.10.2012

Вот как я решил это с помощью PHP. Приведенное ниже редактирование проверяет, установлен ли параметр страницы из тега {{ blog:posts }}. Когда это так, он захватывает последний сегмент и использует его в качестве фильтра категории в запросе к базе данных, чтобы получить только эти сообщения:

В system/cms/modules/blog/plugin.php найдите функцию «сообщения» и добавьте параметр:

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

Затем используйте следующий оператор, чтобы проверить, установлен ли параметр, а затем добавьте оператор «где»:

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, затем используйте это как макет страницы, и он загрузит список сообщений в блоге, которые имеют ' круто» как категория:

<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 }} 
person Chris Visser    schedule 24.09.2012

Вместо использования тегов я нашел простое решение, позволяющее максимально избегать тегов. Вот.

Вместо использования тегов вызовите представление в плагине и передайте третий параметр как TRUE, чтобы он возвращал строку вместо загрузки представления, чем выполняйте любые виды циклов и условных проверок в представлении, как обычно, как вы делаете с php, конечно. Там не нужно встречать теги. После этого в плагине, где вы вызываете это представление, просто верните одну переменную и используйте свою переменную в тегах на странице для отображения содержимого представления.
Вот пример.

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

И избавьтесь от тегов для кондиционирования и циклов

person Muhammad Raheel    schedule 23.02.2013
comment
@PhilSturgeon как насчет этого трюка, который ломает большинство используемых тегов - person Muhammad Raheel; 23.02.2013