Плагин OctoberCMS Blog для динамического получения последней публикации

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

Я хочу взять последнее сообщение в блоге и отобразить его на главной странице веб-сайта. Я могу сделать это в настоящее время с моей собственной партией сообщения и переменной 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-адресе, что на самом деле не работает для домашняя страница. Как я могу этого добиться?


person Firearrow5235    schedule 04.03.2019    source источник


Ответы (2)


Можно использовать компонент blogPost, но получение слага последнего сообщения и переход к нему кажется не очень хорошей практикой.

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

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

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

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

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

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

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

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

person Hardik Satasiya    schedule 04.03.2019
comment
Это полезно знать. Вчера вечером после реализации своего решения я подумал, что произойдет с производительностью, когда у меня будет 100 сообщений в блоге? Я бы вытащил всю базу данных только для одного сообщения с моей текущей реализацией. - person Firearrow5235; 04.03.2019
comment
Итак, я просто попробовал это, и, используя компонент blogPosts, он по-прежнему вытягивает весь список блогов. Что происходит, когда вы устанавливаете количество сообщений на страницу на 1, так это то, что он разбивает список на страницы, размещая только одно объявление на каждой странице. Итак, на первой странице с компонентом у меня есть сообщение в блоге, а затем список ссылок на следующие страницы (1, 2, 3, 4), которые мне не нужны. - person Firearrow5235; 04.03.2019
comment
Личиночная разбивка на страницы использует limit, поэтому она будет извлекать только данные записи в вашей единственной записи, но для подсчета записей запущен дополнительный запрос, вам нужно использовать этот компонент, поэтому это был самый простой способ, если у вас 100 сообщений, он получит только 1 из них и другой запрос для общего количества, чтобы удалить ссылку, вам нужно развернуть и использовать разметку на странице [переопределить ее] - person Hardik Satasiya; 06.03.2019

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

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

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

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

[blogPost]
==
<?
  use RainLab\Blog\Models\Post;

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

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

person Firearrow5235    schedule 04.03.2019