Как осуществить вывод views только по одному пути [РЕШЕНО]

Аватар пользователя dudin.ie dudin.ie 21 ноября 2011 в 14:54

Создал views с выводом материалов.
Вывод происходит по путям:
http://mysite.ru/myview
http://mysite.ru/myview/*

Можно ли настроить views таким образом, чтобы вывод осуществлялся только по пути myview а по пути myview/* был бы 404?
Как?

Комментарии

Аватар пользователя dudin.ie dudin.ie 21 ноября 2011 в 16:02

Для таких, чтобы случайным образом в индекс поисковиков не попадали страницы с совершенно одинаковым контентом.
Ну и просто для красоты *)

Аватар пользователя YGerasimov YGerasimov 21 ноября 2011 в 16:33

Теоретически можно добавить аргумент, в валидации которого и вернуть 404 страницу.

Аватар пользователя Айдар Айдар 23 ноября 2011 в 0:28

А есть другой метод помимо Global: Null?

Подставляю модулем другие урлы адресов в ноды, вывожу вьюхой эти ноды - у вьюхи начало пути частично совпадает в нодами (views - 'news/', ноды: 'news/?id=nid') и получается так, что при отсутствии аргумента вместо нод по моим адресам выводится вьюха, а при наличии нулла - 404.

Аватар пользователя Айдар Айдар 23 ноября 2011 в 1:50

"kalabro" wrote:
http://example.com/?q=news/?id=21[/quote]
Не, именно http://example.com/news/?id=21

Таким модулем подставляется адрес:


<?php 

function osr_menu(){
  
$items['newst/news'] = array(
    
'type' => MENU_CALLBACK,
    
'access arguments' => array('access content'),
    
'page callback' => 'osr_redirect_page',
  );
  return 
$items;
}
 
function 
osr_redirect_page(){
  if(isset(
$_GET['ID']) && is_numeric($_GET['ID']) && ($node node_load($_GET['ID']))){
    return 
node_view($node);
  }
  else {
    return 
drupal_not_found();
  }
}
?>

Т.е. страницы формируются такие: newst/news/?ID=nid

Далее создаю вьюху с путем: 'newst/news/' (слеш на конце делаю алиасом, т.к. вьюха не пропускает такие пути), настраиваю пагинацию, после чего вижу, что по пути 'newst/news/?ID=nid' находится первая страница этой вьюхи. А если поставить Global: Null, то такие страницы отдают 404 ошибку.

Может быть, есть другие модули, делающие каталог с возможностью указания путей (сам не нашел таковые)? С таксономией тоже трюк не проходит - из-за этого модуля урл вида 'newst/news/?page=pid' отадает 404 ошибку.

Т.е. в итоге не получается получить такой адрес пагинации вьюхи: 'newst/news/?page=pid'

Аватар пользователя kalabro kalabro 23 ноября 2011 в 11:01

Ну во-первых, не может быть две страницы по одному пути. Если вьюха вешается на тот же самый путь, что у вас в модуле ('newst/news'), то она просто затирает всё что вы там написали.
Во-вторых, зачем вам этот ID в гете? Принципиально? А то бы зарегистрировали себе путь 'newst/news/%node' и всё бы у вас открывалось по 'newst/news/123'.
Если вам обязательно нужен ваш ?ID, то тогда отключайте у вьюхи представление Page и выводите её вручную в вашем модуле. Примерно так:


<?php
// ...

function osr_redirect_page(){
  if(isset(
$_GET['ID']) && is_numeric($_GET['ID']) && ($node node_load($_GET['ID']))){
    return 
node_view($node);
  }
  else {
    if (
module_exists('views')) {
       return 
views_embed_view('my_view_machine_name');
    }
  }
  
  return 
drupal_not_found();
}

// ...
?>
Аватар пользователя Айдар Айдар 23 ноября 2011 в 11:22

Екатерина, Спасибо большое!

Да, пути обязательны именно с 'ID', т.к. импортирую в Друпал старый сайт и пытаюсь сохранить его неЧПУ урлы.

Аватар пользователя kalabro kalabro 23 ноября 2011 в 11:32

описание тогда к вьюхе добавьте, что она у вас используется там-то и там-то, чтоб потом не удалить случайно

Аватар пользователя Айдар Айдар 23 ноября 2011 в 15:27

Блин, а теперь очередная трабла: в модуле напрямую указано:

<?php
$items
['newst/news/'] = array ...
?>

Однако, при просмотре вьюхи (newst/news/) пейджинг все равно выглядит таким образом: 'newst/news?page=pid' (без слеша перед '?', т.е. должно было быть так: 'newst/news/?page=1').

При этом, если руками прописать слеш, то открывается та же страница, но снова ссылки на страницы без слеша.

Алиасы тут не помогут скорее всего. Может быть, есть и тут какое-либо решение?