Silverstripe - заказ сообщений в блоге

Думал, что это будет довольно легко, но, похоже, я борюсь с этим.

Как блог Silverstripe сортирует свои сообщения? Я хочу закрепить конкретное сообщение в блоге вверху списка, поэтому я создал поле SortOrder и присвоил ему значение 1. Пытался отсортировать по SortOrder, а затем по PublishDate, но все время сортировка выполняется только по PublishDate.

Даже изменение этого в модели блога ничего не дает:

private static $default_sort = '"PublishDate" IS NULL DESC, "PublishDate" DESC' ;

person GiarcTNA    schedule 06.04.2017    source источник
comment
Обновление default_sort должно работать, например BlogPost: default_sort: 'SortOrder DESC, PublishDate DESC' в вашем config.yml. Затем установка SortOrder на 1 для вашего прикрепленного сообщения должно поместить его вверху, предполагая, что другие BlogPosts имеют более низкие значения. Убедитесь, что для BlogPost_Live.SortOrder установлено значение 1 - у меня работает.   -  person jjjjjjjjjjjjjjjjjjjj    schedule 06.04.2017


Ответы (2)


Обновление default_sort из BlogPost должно работать:

# In your config.yml
BlogPost:
  default_sort: 'Sticky DESC, PublishDate DESC'
  extensions:
    - MyBlogPostExtension

Расширьте BlogPost, чтобы добавить Sticky логическое значение (это также может быть Int):

class MyBlogPostExtension extends DataExtension
{

    private static $db = [
        'Sticky' => 'Boolean'
    ];

    public function updateCMSFields(FieldList $fields)
    {
        $stickyField = CheckboxField::create(
            'Sticky',
            'Sticky this blogpost'
        );

        $fields->addFieldToTab(
            'Root.Main',
            $stickyField
        );
    }

}

Убедитесь, что BlogPost, который вы хотите прикрепить, опубликован с Sticky, установленным в значение true.

person jjjjjjjjjjjjjjjjjjjj    schedule 06.04.2017
comment
Это потрясающе! Спасибо - person GiarcTNA; 07.04.2017

Я немного боролся с блогом, сортировкой и лесорубом (публикация в GridField, а не на Sitetree). Я использую heyday / silverstripe-gridfieldversionedorderablerows, чтобы его можно было сортировать вручную.

Injector:
  GridFieldConfig_BlogPost:
    class: GridFieldConfig_MyBlogPost

<?php
class GridFieldConfig_MyBlogPost extends GridFieldConfig_BlogPost
{
    public function __construct($itemsPerPage = null)
    {
        parent::__construct($itemsPerPage);
        $this->addComponent(new GridFieldVersionedOrderableRows('Sort'));
        $this->getComponentByType("GridFieldPaginator")->setItemsPerPage(100);
        $this->getComponentByType("GridFieldDataColumns")->setDisplayFields(array(
            "BlogThumbnail" => "Thumbnail",
            "Title" => "Title"
        ));
    }
}

Я сделал свой собственный PaginatedListSorted в DataExtension of Blog, но вы, вероятно, просто могли бы установить sort, как предложил Янне Клуман для yml.

person munomono    schedule 07.04.2017