[Введение] Какая функция отвечает за «сортировку по кликам» в представлениях?
Нажмите «Сортировать» - этот флажок на втором экране - в настройках таблицы представлений есть функция, которая включена толькодля полей, которые имеют правильно определенные обработчики.Как вы, наверное, знаете, каждое поле в представлениях имеет несколько обработчиков (для отображения, фильтрации, сортировки).А чтобы сортировка по клику была возможна в указанном столбце, его обработчик поля должен иметь две определенные функции: click_sortable
и click_sort
.Первому нужно просто вернуть true
, а второму нужно правильно реализовать сортировку по представлению.Например, см. Обработчик: [views_module_path]/handlers/views_handler_field.inc
.
Ваш случай:
Кажется, что в вашем столбце "Опубликованное событие" определен обработчик, который не имеет click_sortable
иclick_sort
функций (или click_sortable
просто возвращает false
).
Возможное исправление:
Найти место, где вы определили источник представления (зависит от того, какВы информировали мнения об этом, если я понимаю, что-то вроде «Информация о пользователе» - возможно, в функции hook_entity_info
или hook_views_data
), проверьте, какой обработчик назначен для вашего поля «Опубликованное событие», и измените его.
Трудно сказать, где вам нужно искать, так как это зависит от вашей реализации.
Я предлагаю вам попробовать создать hook_views_data_alter
функцию и dpm () для начала.Позже вы можете изменить его следующим образом:
mymodule_views_data_alter(&$data) {
$data['some_view_info']['published_event']['field']['handler'] = 'views_handler_field_numeric';
}
Edit 1
Сначала вы могли бы сказать, где этот код?Это внутри класса обработчика, или, может быть, какой-то хук представлений?Представления дают вам большую гибкость, но это затрудняет их понимание, и я не уверен, чего именно вы достигнете и как.
Если ваше поле работает правильно, вы можете попробовать просто включить сортировку по кликам.
Пример: я создал функцию hook_views_data_alter для просмотра содержимого данных представлений
function mymodule_views_data_alter(&$data) {
dpm($data,'d');
}
Вам может потребоваться очистить кеш, чтобы увидеть dpm хаков * _alter.Внутри массива dpm я нашел «users» для общего примера, и его имя поля выглядит так:
Я предлагаю вам попробовать изменить вашполе с click_sortable = TRUE
и посмотреть, что произойдет.Если это не поможет, пожалуйста, предоставьте больше информации о вашем поле, как вы его создали, как оно выглядит в hook_views_data_alter
и какие обработчики оно определило.
Edit 2
Хорошо, так что у вас естьВаши просмотры экспортированы в код в файл views_default
.Но это только позволяет вам экспортировать просматривать вас создал из базы данных в код, так что это в основном отражение того, что вы сделали в веб-редакторе представлений (например, page yourwebsite.com/admin/structure/views/view/your_view_name/edit
).Вам нужно изменить поведение одного из ваших полей , чтобы оно стало сортируемым (добавить функции click_sortable
и click_sort
в класс обработчика) или изменить обработчик этого поля к одному с возможностью сортировки (измените обработчик field
на другой, например views_handler_field_numeric
).Если у вас нет опыта в создании обработчиков, и это один из универсальных обработчиков, я предлагаю вам вернуться к моему Edit 1 , проверить ваш dpm и попытаться изменить массив $ data, чтобы найти решение.
Редактировать 3
Небольшое объяснение, чтобы избежать путаницы.При создании нового представления вы выбираете коллекцию, на которой основано это конкретное представление (самый простой пример - это может быть таблица MySQL, и представление будет использовать запросы SQL для извлечения данных из нее).Копая вниз, мы имеем:
Коллекция - например.User
, которая является таблицей базы данных user
, это то, что вы выбираете в качестве источника при создании нового представления.
Поле - напр.mail
, который является столбцом базы данных mail
, это поля, которые вы добавляете в свое представление.
Обработчик поля - например.views_handler_field_numeric
, это имя класса обработчика для использования по указанному полю
Теперь, если вы не создали свой собственный обработчик, то в вашем поле «Опубликованное событие» есть один из обработчиков общих представлений. Вы никогда не должны изменять код добавляемых модулей - особенно широко используемый в качестве обработчиков представлений.Вот почему мое предложение добавить функции click_sortable
и click_sort
неверно.Вместо этого вам следует сменить обработчик, отвечающий за поле «Опубликованное событие».
Лучший способ - определить правильный обработчик в месте, где вы определяете свое поле «Опубликованное событие».Если это как-то невозможно, единственный способ, о котором я могу думать, это hook_views_data_alter
, см. Документацию для получения дополнительной информации и примеров.Я полагаю, вы должны попытаться переопределить обработчик вашего поля в универсальный числовой обработчик views_handler_field_numeric
, поскольку он должен иметь полную функцию сортировки, или попытаться добавить свойство click_sortable
в массив полей, как вы можете видеть на первом изображении моего поста, но яне могу предоставить вам полностью протестированный пример.