Вернуться   Форум SAPE.RU > Другое > Курилка

-->
Ответ
 
Опции темы
Старый 11.02.2011, 23:04   #1
Эксперт
 
Регистрация: 05.02.2008
Сообщений: 2,363
Вес репутации: 307
danilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущее
По умолчанию Нужна помощь по php

В php практически не разбираюсь. Просьба помочь.
Возникла необходимость в меню прописать условие для внешних ссылок атрибут rel="nofollow"
В данном случае для $LINK
Ниже привожу код файла меню (cms битрикс, если это имеет значение):
PHP код:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?><?
$sMenu 
'<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="0%">&nbsp;</td>';

for(
$i=0$i<count($MENU_ITEMS); $i++)
{

    
$MENU_ITEM $MENU_ITEMS[$i];
    
extract($MENU_ITEM);

    if(
$SELECTED)
        
$clrtext 'topmenuact';
    else
        
$clrtext 'topmenu';

    
$sMenu .= '<td>';
    
$sMenu .= '<table border="0" cellspacing="0" cellpadding="0" height="27"><tr>';
    
$sMenu .= '<td onmouseover="show('.$i.')" onmouseout="hidden('.$i.')"><a href="'.$LINK.'" class="'.$clrtext.'"><nobr>&nbsp;'.$TEXT.'&nbsp;</nobr></a></td>';
    
$sMenu .= '<td width="0%">';

    if(
$i<count($MENU_ITEMS)-1//add vertical divider after all items but not after the last one
        
$sMenu .= '<img src="/images/222.gif" width="15" height="19" alt="">';
    else
        
$sMenu .= '<img src="/images/222.gif" width="15" height="19" alt="">';

    
$sMenu .= '</td></tr></table>';

    
}
$sMenu .= '</tr></table>';
?>
danilclub вне форума   Ответить с цитированием
Старый 11.02.2011, 23:07   #2
Старый зулус
 
Аватар для slavs™
 
Регистрация: 18.02.2008
Адрес: КваЗулу-Наталь
Сообщений: 1,649
Вес репутации: 339
slavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущееslavs™ - прекрасное будущее
По умолчанию

а в чем сложность?
PHP код:
<a href="'.$LINK.'" class="'.$clrtext.'" rel="nofollow"
здесь
slavs™ вне форума   Ответить с цитированием
Старый 11.02.2011, 23:09   #3
Эксперт
 
Регистрация: 05.02.2008
Сообщений: 2,363
Вес репутации: 307
danilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущее
По умолчанию

Цитата:
Сообщение от slavs™ Посмотреть сообщение
а в чем сложность?
Нужно лишь для внешних атрибут подставлять.
danilclub вне форума   Ответить с цитированием
Старый 11.02.2011, 23:28   #4
Эксперт
 
Регистрация: 12.12.2009
Адрес: Ростов-на-Дону
Сообщений: 1,537
Вес репутации: 244
eresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущее
По умолчанию

Коротко:
на входе - $url_in;
используете регулярное выражение
$regexp = '/<a(.*?)\shref="([^"]+)"\s*([^>]*)>(.*?)<\/a>/i';

далее -
$url = parse_url($match[2]);
if ($url['host'] == $_SERVER['HTTP_HOST']) return $url_in; //возвращаем без изменения (ссылка не внешняя)

иначе - собираете ссылку заново из того что извлекло регулярное выражение, добавляя всё что заблагорассудится
__________________
Партнёрка знакомств с блоком SAPE. Сапа без расходов на хостинг!
Самый удобный Хостинг (в т.ч. сейчас - бесплатное полугодовое тестирование хостинга Node.JS)
eresik вне форума   Ответить с цитированием
Старый 11.02.2011, 23:31   #5
Эксперт
 
Регистрация: 05.02.2008
Сообщений: 2,363
Вес репутации: 307
danilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущее
По умолчанию

Цитата:
Сообщение от eresik Посмотреть сообщение
Коротко:
Извините. Мне бы это... как его всё прописать в приведённый файл? Самостоятельно не осилю
danilclub вне форума   Ответить с цитированием
Старый 11.02.2011, 23:45   #6
Эксперт
 
Регистрация: 12.12.2009
Адрес: Ростов-на-Дону
Сообщений: 1,537
Вес репутации: 244
eresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущее
По умолчанию

Цитата:
Сообщение от danilclub Посмотреть сообщение
как его всё прописать в приведённый файл?
Ну... без тестирования, с минимальными правками код такого модуля для друпал:

после того как меню подготовлено - прогоняете его через эту функцию:
$sMenu=noindex_external_links_filter($sMenu);


ну а сами функции - либо перед этим прописываете, либо выносите в какой-нибудь include

PHP код:
function noindex_external_links_filter($text '') {

        
$regexp '/<a(.*?)\shref="([^"]+)"\s*([^>]*)>(.*?)<\/a>/i';
        
$text preg_replace_callback($regexp'noindex_external_links_replace'$text);

      return 
$text;
}

function 
noindex_external_links_replace($match) {

  
$url parse_url($match[2]);
  if (
$url['host'] == $_SERVER['HTTP_HOST'])  return $match[0]; //Inner Link

  // Default in case it doesn't get changed.
  
$link $match[0];

    
//Combine all attributes:
    
$attr $match[1] .' '$match[3];
      if (
strpos($attr'nofollow') === FALSE) {
        if (
strpos($attr'rel="') === FALSE)     $attr $attr .' rel="nofollow" ';
        else    
$attr preg_replace('!rel="([^"]+)"!''rel="${1} nofollow"'$attr);
      }
    }

    
$link '<a target="_blank" href="'$match[2] .'" '$attr .'>'$match[4] .'</a>';

  return 
$link;

__________________
Партнёрка знакомств с блоком SAPE. Сапа без расходов на хостинг!
Самый удобный Хостинг (в т.ч. сейчас - бесплатное полугодовое тестирование хостинга Node.JS)
eresik вне форума   Ответить с цитированием
Старый 12.02.2011, 00:53   #7
Эксперт
 
Регистрация: 05.02.2008
Сообщений: 2,363
Вес репутации: 307
danilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущееdanilclub - прекрасное будущее
По умолчанию

eresik, благодарю за помощь здесь и в личке. Всё работает.
danilclub вне форума   Ответить с цитированием
Старый 12.02.2011, 00:55   #8
Эксперт
 
Регистрация: 12.12.2009
Адрес: Ростов-на-Дону
Сообщений: 1,537
Вес репутации: 244
eresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущееeresik - прекрасное будущее
По умолчанию

Цитата:
Сообщение от danilclub Посмотреть сообщение
благодарю за помощь
Благодарность принял
__________________
Партнёрка знакомств с блоком SAPE. Сапа без расходов на хостинг!
Самый удобный Хостинг (в т.ч. сейчас - бесплатное полугодовое тестирование хостинга Node.JS)
eresik вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь с PHP Красавчег Курилка 38 11.10.2010 03:03
нужна Помощь settinfoo Вопросы по работе системы 1 17.09.2010 00:52
Нужна помощь Litov Вопросы по работе системы 2 14.05.2010 22:18
Нужна помощь s11iv Курилка 13 24.02.2010 03:27
Нужна помощь solonko2009 Вопросы от новичков 4 08.10.2009 11:53


Часовой пояс GMT +3, время: 09:37.