Запомнить из какого термина таксономии пользователь попал в ноду

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

Аватар пользователя Dimm Dimm 25 ноября 2008 в 9:05

Задача:
Запомнить из какого термина таксономии пользователь попал в ноду и вывести этот термин в breadcrumb

Решение:
Передать в url переменную ?ft=tid
В settings.php:
<?php
function custom_url_rewrite_outbound(&$path, &$options, $original_path) {
if(arg(0)=='taxonomy' && (is_numeric(arg(2)) || arg(2)=='all')){
if (preg_match('|^node(/.*)|', $original_path, $matches)) {
$path = $path. '?ft='. arg(2);
}
}
if(arg(0)=='node' && (is_numeric(arg(1)))){
if (preg_match('|^node(/.*)|', $original_path, $matches) || preg_match('|^firm(/.*)|', $original_path, $matches)) {
if($_GET['ft']) {
$ft=$_GET['ft'];
$node1=node_load(arg(1));
foreach ($node1->taxonomy as $term) {
$ft=$term->tid;
if($_GET['ft']==$term->tid){
break;
}
}
$path = $path. '?ft='. $ft;
}
}

}
}
?>
Устанавливаем модуль taxonomy_breadcrumb.
На нужных страницах выводим php-блок с кодом:
<?php
if($ft){
$breadcrumb = taxonomy_breadcrumb_generate_breadcrumb($ft);
if(arg(0) =='node'){
$breadcrumb[] = l($node->title, 'node/'.$node->nid);
}
drupal_set_breadcrumb($breadcrumb);
}?>

Комментарии

Аватар пользователя Dimm Dimm 25 ноября 2008 в 9:30

В robots.txt добавил
Disallow: /*ft=
Чтобы небыло дублирующего контента.

Еще хотелось бы выдавать пользователям - ссылки с параметром ft=
, а роботам без.
Как это сделать?
Подскажите пожалуйста.

Аватар пользователя gorr gorr 25 ноября 2008 в 19:01

<?php
$userAgent = strtolower($_SERVER[’HTTP_USER_AGENT’]);

if (substr_count($userAgent, ‘crawler’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘yandex’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘webalta’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘mail.ru’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘googlebot’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘aport’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘rambler’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘yahoo’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ’stackrambler’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ’search’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘indexer’) > 0) $isCrawler = 1;
else if (substr_count($userAgent, ‘cuill.com’) > 0) $isCrawler = 1;
?>
примерно так, но конечно они ходят и с другими агентами, на 100% никогда не сделаешь, также и по ip, иначе бы их легко было бы обмануть.