Проблема плавно вытекает отсюда.
Есть вьюшка, в которой предусмотрен контекстный фильтр. Аргументом контекстного фильтра является uid текущего пользователя. Мне нужно создать ссылку в меню (например в блоке навигации), которая бы вела по адресу типа: http://moy_sayt/kontrolnaya/45, где 45 - айдишник текущего пользователя.
С помощью hook_menu() я создаю ссылку и определяю ее аргумент:
<?php
function moy_molul_menu() {
$items['kontrolnie_spisok/%user'] = array(
'title' => 'Задание',
'page callback' => 'men',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function
user_to_arg() {
global $user;
$arg = $user -> uid;
return $arg;
}
?>
Если отключить представление, то работает hook_menu(), ссылка создается. Но при включенной вьюхе она не дает появляться ссылке.
В связи с этим вопрос: как сделать динамическую ссылку, которая ведет на страницу содержание которой определяется вьюхой?
Комментарии
https://drupal.stackexchange.com/a/22431
Айдишника не должно быть в ссылке. Он должен передаваться, как указали в посте выше. Если айдишник оставить в ссылке, то любой юзер сможет просмотреть результаты любого другого юзера.
Нет, это не то. По ссылке предлагают установить фильтр по автору ноды. Автор всех нод я - администратор. Проблема в том, что ноды, которые надо вывести явно не связаны с пользователем. Эта связь установлена в таблице, которую я сам создал.
Вопрос уже не в том, как реализовать мою глобальную задачу, я хочу понять, в принципе возможно создать динамическую ссылку которая ведет на адрес в вьюхой? Например ссылка "моя учетная запись" ведет по адресу http://example.com/?q=user/3, где 3 - это айдишник пользователя и формируется он динамически. Получается что по такому адресу я вообще не могу использовать views? Или могу?
Вы в hook_views_data указали связь с таблицей user?
Нет, у меня только связь с таблицей 'node'. Вот что у меня в коде:
<?php
$data['otvetbl_v_kontrolnoy']['table']['join'] = array(
function moy_modul_views_data() { $data['otvetbl_v_kontrolnoy']['table']['group'] = t('otvetbl_v_kontrolnoy');
'node' => array(
'left_field' => 'nid',
'field' => 'nid_kontrolnoy',
),
);
$data['otvetbl_v_kontrolnoy']['flag'] = array(
'title' => 'Контольная написана',
'help' => t('Написана ли контрольная'),
'filter' => array(
'handler' => 'views_handler_filter_boolean_operator',
'label' => 'Контольная написана?',
'type' => 'yes-no',
),
);
$data['otvetbl_v_kontrolnoy']['uid'] = array(
'title' => t('UID'),
'help' => t('Идентификатор пользователя'),
'argument' => array(
'handler' => 'views_handler_argument_string',
),
);
return $data;
}
?>
Мне нужно с обеими таблицами связь установить? Добавить в код:
<?php
$data['otvetbl_v_kontrolnoy']['table']['join'] = array(
'users' => array(
'left_field' => 'uid',
'field' => 'uid',
),
);
?>
?
Ну что-то типа того.
Можете. Просто создайте представление-страницу и не морочтесь с хук_меню.
В настройках контекстного фильтра можно указать позицию аргумента в пути (считать с ноля, ремемберхараммам бро!).
Речь не о том, можно ли создать вьюху с аргументом в пути, а в том, что для такой вьюхи нельзя создать ССЫЛКУ в меню. Если создать представление-страницу и в самой вьюхе попробовать задать ссылку в меню, то вылезет сообщение :
Тогда блоком вывести, на страницу из хук_меню, или лучше просто программно туда вьюху запихнуть (прям дефолтный дисплей).
А для формирования динамических тайтлов - есть 'title callback' у хука_меню.
Не совсем понял, представление вывести в блок?
Представление в страницу:
<?php
function moy_molul_menu() {
$items['kontrolnie_spisok/%user'] = [
'title callback' => 'moy_molul_page_title_callback',
'title arguments' => [1],
'page callback' => 'moy_molul_page_callback',
'page arguments' => [1],
'access callback' => ['access content'],
'type' => MENU_NORMAL_ITEM,
];
return $items;
}
function moy_molul_page_title_callback($user) {
return t('@User page', ['@User' => $user->name]);
}
function moy_molul_page_callback($user) {
return views_embed_view('VIEW_NAME', 'VIEW_DISPLAY_NAME'), $user->id);
}
?>
Типа того.
Но можно и блоком - тупо вернуть пустую страницу и вывести на нее использую стандартные настройки по маске.
А, вон как. Т.е. хуком_меню вывести представление на страницу. Я сейчас свою проблему по-другому решил (писал свой handler), но так надо будет тоже попробовать. Спасибо.