Мой модуль добавляет поле CCK к существующему типу контента. Как затем изменить существующее представление для сортировки с использованием нового поля?
Я создаю новый модуль ('best_answer'), который основывается на функциональности существующего модуля ('ответы').
Новый модуль добавляет новое поле CCK ('best_answer_p') к типу контента CCK ('ответ'), который был определен в исходном модуле.
Исходный модуль также определил представление ('question_answers'), в котором перечислены узлы ответов, отсортированные по нескольким факторам. Я хотел бы изменить это представление, чтобы оно также сортировалось по новому полю "best_answer_p".
Я мог бы сделать это, просто переопределив представление, используя пользовательский интерфейс представлений. Однако это означает, что если какой-либо другой модуль также захочет каким-либо образом переопределить представление, моя сортировка "best_answer" будет потеряна.
Итак, я хотел бы сделать это таким образом, чтобы программно изменять существующее представление, а не переопределять его. Я пытаюсь сделать это с помощью Hook_views_query_alter. Но я столкнулся с ошибкой.
Может ли кто-нибудь указать мне правильное направление?
Вот мой код:
function best_answer_views_query_alter (&$view, &$query) {
if ($view->name == 'question_answers') {
// add the best answer field to the query
$query->tables['node']['node_data_field_best_answer_p'] = array(
'count' => 1,
'alias' => 'node_data_field_best_answer_p',
);
// sort answers so that the best answer is displayed first
$new_orderby[0] = 'node_data_field_best_answer_p_field_best_answer_p_value DESC';
foreach ($query->orderby as $key => $value) {
$new_orderby[$key+1] = $value;
}
$query->orderby = $new_orderby;
}
}
Вот ошибка:
Предупреждение пользователя: Неизвестный столбец "node_data_field_best_answer_p_field_best_answer_p_value" в предложении "порядок" запрос: ВЫБЕРИТЕ node.nid КАК nid, votingapi_cache_node_points_vote_sum.значение КАК votingapi_cache_node_points_vote_sum_ значение, node.создано КАК node_created ИЗ узла узел СЛЕВА ПРИСОЕДИНИТЬСЯ К votingapi_cache votingapi_cache_node_points_vote_sum НА узле.nid = votingapi_cache_node_points_vote_sum.идентификатор содержимого И (votingapi_cache_node_points_vote_sum.content_type = 'узел' И votingapi_cache_node_points_vote_sum.value_type = 'точки' И votingapi_cache_node_points_vote_sum.tag = 'голосовать' И votingapi_cache_node_points_vote_sum.функция = 'сумма') СЛЕВА ПРИСОЕДИНИТЬСЯ К content_type_answer node_data_field_answer_question НА узле.vid = node_data_field_answer_question.vid, ГДЕ (узел.статус <> 0 ИЛИ (узел.uid = 1 И 1 <> 0) ИЛИ 1 = 1) И (узел.введите ("ответ")) И (вопрос node_data_field_answer_question.field_answer_question_nid = 2) ПОРЯДОК ПО node_data_field_best_answer_p_field_best_answer_p_значение DESC, голосование_каче_нод_поинтов_воте_сум_значение DESC, ОГРАНИЧЕНИЕ node_created DESC 0, 10 в D:\xampp\htdocs\drupal\sites\all\modules\views\includes\view.inc на линии 771.
1 answers
Вы должны переопределить представление и изменить сортировку. Я никогда не видел модуля, который пытался бы изменить представление, определенное другим модулем.