Плагин для блога Dynamic grab latest post OctoberCMS

#php #octobercms #octobercms-plugins

#php #octobercms #octobercms-плагины

Вопрос:

Я задавал этот вопрос на октябрьских форумах, но 12 часов спустя в сообщении все еще написано «не одобрено», и я не верю, что это видно. Вот копирование-вставка:

Что я хочу сделать, это захватить последнюю запись в блоге и отобразить ее на главной странице веб-сайта. В настоящее время я могу сделать это с помощью моего собственного post partial и posts переменной, введенной blogPosts компонентом, вот так:

 [blogPosts]
pageNumber = "{{ :page }}"
postsPerPage = 10
noPostsMessage = "No posts found"
sortOrder = "published_at desc"
categoryPage = "blog/category"
postPage = "blog/post"
==
{% partial 'site/blogpost' post=posts|last %}
  

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

Ответ №1:

Можно использовать компонент BlogPost, но извлечение last post slug и переход к нему кажутся не очень хорошей практикой

что вы делаете, так это можете использовать [blogPosts] компонент и установить там правильные настройки для получения последнего / last blog

чтобы сделать это возможным

введите описание изображения здесь

Сообщений на странице: 1 [ поскольку нам нужен только последний пост]

Порядок публикации: Published(desc) [ вы можете изменить по мере необходимости]

теперь просто используйте правильную разметку, чтобы отобразить ее по умолчанию, или просто переопределите, чтобы настроить ее.

Примечание: Он вернет список записей, но в списке будет только 1 post то, что требуется, поэтому для пользовательской разметки просто позаботьтесь об этом.

если есть какие-либо сомнения, пожалуйста, прокомментируйте.

Комментарии:

1. Это полезно знать. Вчера вечером после внедрения моего решения я подумал о том, что происходит с производительностью, когда у меня есть 100 сообщений в блоге? Я бы использовал всю базу данных только для одного поста с моей текущей реализацией.

2. Итак, я только что попробовал это, и с помощью компонента blogPosts он по-прежнему извлекает весь список блогов. Что происходит, когда вы устанавливаете для параметра «Сообщения на страницу» значение «1», так это разбиение списка на страницы, размещая только одно объявление на каждой странице. Итак, на главной странице с компонентом у меня есть сообщение в блоге, а затем список ссылок на следующие страницы (1, 2, 3, 4), которые мне не нужны.

3. используется разбиение на страницы личинок limit , поэтому он будет извлекать только заданные записи, в вашем случае одну запись, но для подсчета количества записей запускается дополнительный запрос, вам нужно использовать этот компонент, чтобы это был самый простой способ, если у вас 100 записей, он будет извлекать только 1 из них и еще один запрос для общего количества, чтобы удалить ссылку, вам нужно развернуть и использовать разметку на странице [ переопределить ее]

Ответ №2:

Итак, как и в большинстве случаев, когда дело доходит до разработки… RTFM.

Вся необходимая мне информация была в разделе «Компоненты» документации October CMS, и, конечно, я искал только в документации плагина. В итоге я частично заменил компонент по умолчанию своим собственным, а затем передал slug компоненту. Моя первоначальная причина, по которой я хотел использовать часть по умолчанию, заключалась в том, что моя пользовательская часть не отображала изображения, но по умолчанию будет. Мне просто нужно было украсть строку <p>{{ post.content_html|raw }}</p> , чтобы заставить это работать.

 [blogPost]
==
...
{% component 'blogPost' slug=posts|last.slug %}
  

Дополнительная информация: С помощью вышеупомянутого решения ваш шаблон извлекает все записи в блоге из базы данных, что означает, что если у вас много записей, это может (и, скорее всего, повлияет) на производительность. Оказывается, в шаблонах October есть раздел PHP. Правильная вещь, которую нужно сделать, это удалить blogPosts компонент и захватить последнюю модель post следующим образом:

 [blogPost]
==
<?
  use RainLabBlogModelsPost;

  function onStart()
  {
    $this['latestPost'] = Post::latest()->first();
  }
?>
==
{% component 'blogPost' slug=latestPost.slug %} 
  

Примечание: blogPost Компонент вводит post переменную, которая переопределяет post переменную, определенную в разделе PHP. Именно так помечается переменная latestPost .