Как осуществить вывод views только по одному пути [РЕШЕНО]
Прислано: dudin.ie
пн, 21/11/2011 - 10:54
Создал views с выводом материалов.
Вывод происходит по путям:
http://mysite.ru/myview
http://mysite.ru/myview/*
Можно ли настроить views таким образом, чтобы вывод осуществлялся только по пути myview а по пути myview/* был бы 404?
Как?
- dudin.ie's blog
- Для комментирования войдите или зарегистрируйтесь
а для каких целей?
- Для комментирования войдите или зарегистрируйтесь
Для таких, чтобы случайным образом в индекс поисковиков не попадали страницы с совершенно одинаковым контентом.
Ну и просто для красоты *)
- Для комментирования войдите или зарегистрируйтесь
Теоретически можно добавить аргумент, в валидации которого и вернуть 404 страницу.
- Для комментирования войдите или зарегистрируйтесь
закрыть в роботе /myview/* от индексации
- Для комментирования войдите или зарегистрируйтесь
Аргумент Global: Null

- Для комментирования войдите или зарегистрируйтесь
так просто в роботсе закройте и не парьтесь
- Для комментирования войдите или зарегистрируйтесь
Аргумент Global: Null

Спасибо вам, Катя! То что надо было!
- Для комментирования войдите или зарегистрируйтесь
А есть другой метод помимо Global: Null?
Подставляю модулем другие урлы адресов в ноды, вывожу вьюхой эти ноды - у вьюхи начало пути частично совпадает в нодами (views - 'news/', ноды: 'news/?id=nid') и получается так, что при отсутствии аргумента вместо нод по моим адресам выводится вьюха, а при наличии нулла - 404.
- Для комментирования войдите или зарегистрируйтесь
ноды: 'news/?id=nid'
как это должно работать?
http://example.com/?q=news/?id=21
?
- Для комментирования войдите или зарегистрируйтесь
Не, именно 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'
- Для комментирования войдите или зарегистрируйтесь
Ну во-первых, не может быть две страницы по одному пути. Если вьюха вешается на тот же самый путь, что у вас в модуле ('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();
}
// ...
?>- Для комментирования войдите или зарегистрируйтесь
Екатерина, Спасибо большое!
Да, пути обязательны именно с 'ID', т.к. импортирую в Друпал старый сайт и пытаюсь сохранить его неЧПУ урлы.
- Для комментирования войдите или зарегистрируйтесь
описание тогда к вьюхе добавьте, что она у вас используется там-то и там-то, чтоб потом не удалить случайно
- Для комментирования войдите или зарегистрируйтесь
Это обязательно! Спасибо!
- Для комментирования войдите или зарегистрируйтесь
Блин, а теперь очередная трабла: в модуле напрямую указано:
<?php
$items['newst/news/'] = array ...
?>Однако, при просмотре вьюхи (newst/news/) пейджинг все равно выглядит таким образом: 'newst/news?page=pid' (без слеша перед '?', т.е. должно было быть так: 'newst/news/?page=1').
При этом, если руками прописать слеш, то открывается та же страница, но снова ссылки на страницы без слеша.
Алиасы тут не помогут скорее всего. Может быть, есть и тут какое-либо решение?
- Для комментирования войдите или зарегистрируйтесь








Комментарии