ProfiPHPProfiPHP
Категория: Полезное в PHP

Система перекрестных ссылок на сайте

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

Опишем систему реализации перекрестных ссылок на сайте.

Сначала создаем таблицу в базе данных:
relink  CREATE TABLE `relink` (                                 
`link_id` int(11) NOT NULL AUTO_INCREMENT,
`link_url` varchar(32) NOT NULL DEFAULT '',
`link_name` varchar(200) NOT NULL DEFAULT '',
PRIMARY KEY (`link_id`)
Вывод информации осуществляется следующим образом:
// Создаем пустой массив перекрестных ссылок
$links = array( );
// Делаем запрос на выборку всех ссылок с базы данных:
$db->query( "SELECT * FROM `relink`" );
// Перебираем результат и заносим в массив
while ( $row_b = $db->get_row( ) )
{
// Создаем ячейку массива с индексом link_id
$links[$row_b['link_id']] = array( );
// Перебираем все значения строки выборки и заносим в массив:
foreach ( $row_b as $key => $value ) {
$links[$row_b['link_id']][$key] = stripslashes( $value );
}
}
$db->free( );

// Если ссылки существуют:
if ( count( $links ) ) {
// Массив найденных значений
$find = array( );
// Массив замены
$replace = array( );
// Текущая страница
$host = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
// Перебираем все ссылки
foreach ( $links as $value ) {
// Проверяем склонения
$words = explode( "(", $value['link_name'] );
// Если ссылка используется на текущей странице - пропускаем ее
if ( $host AND $value['link_url'] AND $host == $value['link_url'] ) continue;

// Если не указаны склонения
if ( count( $words ) == 1 ) {
$find[] = "#(^|\b|\s|\<br \/\>)(" . preg_quote( $value['link_name'], "#" ) . ")(\b|\s|!|\?|\.|,|$)#ui";
$replace[] = "$1<a href=\"{$value['link_url']}\">$2</a>$3";
}

// Если существую склонения
if ( count($words) == 2 ) {
$find[] = "#(^|\b|\s|\<br \/\>)(" . preg_quote( $words[0], "#" ) . ")({$words[1]}(\b|\s|!|\?|\.|,|$)#ui";
$replace[] = "$1<a href=\"{$value['link_url']}\">$2$3</a>$4";
}
}
// Если совпадения найдены
if( count( $find ) )
{
$source = preg_split( '((>)|(<))', $content_full, - 1, PREG_SPLIT_DELIM_CAPTURE );
$count = count( $source );
// Перебираем сымволы:
for ( $i = 0; $i < $count; $i++ )
{
// Пропускаем ссылки:
if ( $source[$i] == "<" AND substr( $source[ $i + 1 ], 0, 2 ) == 'a ') {
$i = $i + 3;
continue;
}
// Пропускаем теги
if( $source[$i] == "<" or $source[$i] == "[" ) {
$i++;
continue;
}
if ( $source[$i] != "" ) {
$source[$i] = preg_replace( $find, $replace, $source[$i] );
}
}
// Объединяем элементы массива в строку
$source = implode( "", $source );
$content_full = $source;
unset( $source );
}
}
В примере используем Класс для работы с базой данных MySQL

В переменной $content_full сохраняется исходный текст страницы.

Основными правилами при работе с перекрестными ссылками есть:

- Ссылка на другой сайт начинается с http://;

- Ссылку на ваш сайт можно задавать относительную (/page.html);

Добавить комментарий

Имя:
Текст комментария: