Я стараюсь, чтобы первые две записи в моем {{posts}} объекте имели миниатюры, в то время как остальные посты продолжают упорядочиваться по последней опубликованной первой.Я пытаюсь создать фильтр следующим образом:
Определение фильтра в PHP:
function posts_with_thumbs_first_filter( $posts, $num_top_posts = 2 ){
// find first posts with thumbnails in them to decide what posts need to be reordered to first position in the array
$first_posts_with_thumbs = array();
foreach ($posts as $key => $post) {
if ($post->thumbnail) {
$first_posts_with_thumbs[] = $key;
if (count($first_posts_with_thumbs) == $num_top_posts) { break; }
}
}
...manipulate order of posts here...
return $posts;
}
Использование фильтра в Twig:
{% for post in posts|posts_with_thumbs_first %}
...regular post output here, only with posts now reordered...
{% endfor %}
Но этопохоже, что манипулировать порядком записей сложно, потому что это не стандартный массив, это объект Timber \ PostQuery с частными итераторами и методами внутри, которые контролируют данные записей.Я не могу использовать функции массива PHP, такие как array_slice, array_splice и т. Д., Поскольку posts - это не массив, а объект.
Есть ли надежный способ манипулировать порядком записей?