SilverStripe Gridfield как удалить кнопки

Здесь я просматриваю документацию класса gridfield; http://doc.silverstripe.org/framework/en/reference/grid-field

Вот этот код. Пока он отображает поле сетки, он добавляет кнопку на каждом столбце. Как мне отредактировать этот код, чтобы не отображать кнопки? Кнопки – это ссылки на несуществующую страницу. Ссылка на отображаемую страницу; http://img.ruphp.com/php/Capture28.JPG

public function AllPages() { $gridField = new GridField('pages', 'All pages', SiteTree::get()); $dataColumns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns'); $dataColumns->setDisplayFields(array( 'Title' => 'Title', 'URLSegment'=> 'URL', 'LastEdited' => 'Changed' )); return new Form($this, "AllPages", new FieldList($gridField), new FieldList()); } 

Причина:

SilverStripe GridField довольно хорошо построен.
У Basic GridField практически нет никаких функций. Это просто таблица, содержащая нужные вам данные.
Все остальные функции добавляются так называемыми «Компонентами», которыми управляет GridFieldConfig.

Когда вы создаете GridField, как и вы, без указания конфигурации, он создаст для вас конфигурацию ( GridFieldConfig_Base ).

Класс GridFieldConfig_Base – это просто обычный GridFieldConfig с некоторыми уже добавленными компонентами.
Один из тех компонентов, который уже добавлен для вас, называется GridFieldSortableHeader который позволяет вам нажимать на поля для сортировки таблицы (это то, что создает те кнопки, которые вы видите).
Причина, по которой ссылки пуговиц мертвы, вероятно, связана с проблемой маршрутизации (GridField еще не проверен в FrontEnd), или вы, возможно, забыли добавить действие AllPages в $allowed_actions .


Решения:

  1. Обычный стол
    если вам действительно не нужна функция GridField, и вам просто нужна простая таблица, самый простой способ – просто установить пустую конфигурацию:

     public function AllPages() { $config = GridFieldConfig::create(); $dataColumns = GridFieldDataColumns::create(); $dataColumns->setDisplayFields(array( 'Title' => 'Title', 'URLSegment'=> 'URL', 'LastEdited' => 'Changed' )); $config->addComponent($dataColumns); $gridField = GridField::create('pages', 'All pages', SiteTree::get(), $config); return Form::create($this, __FUNCTION__, FieldList::create($gridField), FieldList::create()); } 
  2. Удалить только сортируемый заголовок

     $gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader'); // if you don't have a SortableHeader, you probably also don't want a filter $gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader'); 
  3. Замените сортируемый заголовок только строкой заголовка только для текста

    К сожалению, в настоящее время в SilverStripe нет нормального заголовка, но большой модуль gridfieldextensions от Andrew Short предлагает вам один. Получить модуль на GitHub или Packagist

     $gridField->getConfig()->removeComponentsByType('GridFieldSortableHeader'); // if you don't have a SortableHeader, you probably also don't want a filter $gridField->getConfig()->removeComponentsByType('GridFieldFilterHeader'); $gridField->getConfig()->addComponent(new GridFieldTitleHeader()); 
  4. исправить сортируемый заголовок
    если вы хотите иметь функцию сортировки, вам придется исправить маршрутизацию.
    Прошло некоторое время с тех пор, как я в последний раз использовал GridField в интерфейсе. Я могу только сказать вам, что это действительно сработало.

    1. возможно, маршрутизация не работает, потому что ваше действие формы ( AllPages ) недоступно в качестве URL-адреса, если это так, его довольно легко исправить: просто добавьте AllPages в ваши $allowed_actions вашего контроллера.
    2. если форма доступна, то, вероятно, это ошибка в GridField, мне нужно будет отладить это, чтобы рассказать вам больше. Если это так, ответьте через комментарий или свяжитесь со мной в IRC, и я рассмотрю его.

UPDATE: Я просто ответил на другой вопрос GridField, и пошел немного глубже. возможно, это также полезно для вас: https://stackoverflow.com/a/22433159/1119263 (см. Вариант 2)