Как создать динамическую ссылку, которая ведет на представление views?

Главные вкладки

Аватар пользователя Антоха82 Антоха82 25 июля 2018 в 10:40

Проблема плавно вытекает отсюда.

Есть вьюшка, в которой предусмотрен контекстный фильтр. Аргументом контекстного фильтра является 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(), ссылка создается. Но при включенной вьюхе она не дает появляться ссылке.

В связи с этим вопрос: как сделать динамическую ссылку, которая ведет на страницу содержание которой определяется вьюхой?

Комментарии

Аватар пользователя gun_dose gun_dose 25 июля 2018 в 11:47

Айдишника не должно быть в ссылке. Он должен передаваться, как указали в посте выше. Если айдишник оставить в ссылке, то любой юзер сможет просмотреть результаты любого другого юзера.

Аватар пользователя Антоха82 Антоха82 25 июля 2018 в 12:04

fairrandir wrote:


Нет, это не то. По ссылке предлагают установить фильтр по автору ноды. Автор всех нод я - администратор. Проблема в том, что ноды, которые надо вывести явно не связаны с пользователем. Эта связь установлена в таблице, которую я сам создал.

Вопрос уже не в том, как реализовать мою глобальную задачу, я хочу понять, в принципе возможно создать динамическую ссылку которая ведет на адрес в вьюхой? Например ссылка "моя учетная запись" ведет по адресу http://example.com/?q=user/3, где 3 - это айдишник пользователя и формируется он динамически. Получается что по такому адресу я вообще не могу использовать views? Или могу?

Аватар пользователя Антоха82 Антоха82 25 июля 2018 в 12:44

fairrandir wrote:

Вы в hook_views_data указали связь с таблицей user?

Нет, у меня только связь с таблицей 'node'. Вот что у меня в коде:

<?php
function moy_modul_views_data() {

$data['otvetbl_v_kontrolnoy']['table']['group'] = t('otvetbl_v_kontrolnoy');

 

$data['otvetbl_v_kontrolnoy']['table']['join'] = array(
        
'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',
     ),
   );
?>

?

Аватар пользователя bumble bumble 25 июля 2018 в 19:06

Антоха82 wrote:

Получается что по такому адресу я вообще не могу использовать views? Или могу?

Можете. Просто создайте представление-страницу и не морочтесь с хук_меню.
В настройках контекстного фильтра можно указать позицию аргумента в пути (считать с ноля, ремемберхараммам бро!).

Аватар пользователя Антоха82 Антоха82 25 июля 2018 в 19:13

bumble wrote:

Можете. Просто создайте представление-страницу и не морочтесь с хук_меню.

В настройках контекстного фильтра можно указать позицию аргумента в пути (считать с ноля, ремемберхараммам бро!).

Речь не о том, можно ли создать вьюху с аргументом в пути, а в том, что для такой вьюхи нельзя создать ССЫЛКУ в меню. Если создать представление-страницу и в самой вьюхе попробовать задать ссылку в меню, то вылезет сообщение :

Views не может создать обычные пункты меню для путей, содержащих '%'
Аватар пользователя bumble bumble 25 июля 2018 в 19:17

Тогда блоком вывести, на страницу из хук_меню, или лучше просто программно туда вьюху запихнуть (прям дефолтный дисплей).

А для формирования динамических тайтлов - есть 'title callback' у хука_меню.

Аватар пользователя Антоха82 Антоха82 25 июля 2018 в 19:26

bumble wrote:

или лучше просто программно туда вьюху запихнуть (прям дефолтный дисплей).

Не совсем понял, представление вывести в блок?

Аватар пользователя bumble bumble 25 июля 2018 в 19:33

Представление в страницу:

<?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);
}
?>

Типа того.

Аватар пользователя bumble bumble 25 июля 2018 в 19:44

Но можно и блоком - тупо вернуть пустую страницу и вывести на нее использую стандартные настройки по маске.

Аватар пользователя Антоха82 Антоха82 25 июля 2018 в 19:40

А, вон как. Т.е. хуком_меню вывести представление на страницу. Я сейчас свою проблему по-другому решил (писал свой handler), но так надо будет тоже попробовать. Спасибо.