пятница, 10 августа 2007 г.

SAPE: Прячем ссылки от посетителей. Легально. Не нарушая правил.

У меня сэйп-код стоит на всех страницах некоторых сайтов. На главной я обычно выделяю сэйпу 10 ссылок, на 2ом уровне вложенности (УВ) 5, на третем 3.
Для того, чтобы у пользоателей в глазах не рябило от избытка рекламы, возникает проблема - как разнести эти ссылки по разным участкам.
Тут же напрашивается ответ из FAQ сэйпа, для вывода нескольких ссылок можно использовать что-то вроде:
echo $sape->return_links(3);
// в следующем блоке:
echo $sape->return_links(2);
// и оставшиеся ссылки:
echo $sape->return_links();


Т.е. для того, чтобы у меня на главной странице разнести 10 ссылок по двум блокам надо написать так:
echo $sape->return_links(5);
echo $sape->return_links();

Получается 5 на одном блоке и оставшиеся на другом. Вот тут и кроется некоторый нюанс.
Во-первых, если ссылок всего лишь 5, то все они останутся на одном блоке, другой будет пустовать. (получается опять-таки ненужная куча рекламы, скопление, которое нужно рассредотачивать).
Во-вторых, если это не главная страница а скажем 2ой УВ, там где всего лишь 5, то они опять-таки слепятся все в одном месте, ну и по 3-му УВ тоже самое.
Если пытаться регулировать код 2го УВ, то что будет с распределением ссылок на главной?

Итак цель: автоматическое балансирование ссылок по указанному количеству блоков на странице.
Сразу привожу готовый код:

//... тут идёт код сэйп
define('_SAPE_USER', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
$sape = new SAPE_client();
// ... заметьте, что строчки:
// $sape->return_links()
// сейчас нет, она вызывается позже

// Ваш сепаратор ссылок в сэйпе
$sapeSeparator = '<br>';
// количество блоков на странице
$partsCount = 2;
$links = array();
$links = explode( $sapeSeparator, $sape->return_links() );
$parts = array();
$linksInBlockCount = ceil( count( $links ) / $partsCount );
$n = 0;
for( $i=0; $i<$partsCount; $i++ ){
for( $i1=0; $i1<$linksInBlockCount; $i1++ ){
if ( isset( $links[$n] ) && ( $links[$n] != '' ) ) {
$parts[$i] .= $links[$n] . $sapeSeparator;
$n++;
}
}
}


На выходе этого кода Вы получаете массив элементы которого - готовый HTML код блока для вставки в страницу. Более простым языком, вставляется так:
echo $parts[0]; // первый блок
echo $parts[1]; // второй и т.д.


На строчке:
$parts[$i] .= $links[$n] . $sapeSeparator;
Параллельно, Вы можете даже задать какое-либо дополнительное оформление каждой ссылке. Например:
$parts[$i] .= '<div style="border: 1px dashed red;">' . $links[$n] . '</div>' .$sapeSeparator;
ну тут уже фантазировать по-всякому можно. Главное, принцип действия демонстрирую.

* Для просмотра массива (при отладке) можно использовать print_r( $parts );
** Я знаю, что переменную $n можно было бы и не заводить вовсе, используя в качестве индекса: [$i * $linksInBlockCount + $i].
Но как по мне, так операция инкрементации отнимет меньше ресурсов, нежели арифметическое выражение индекса. Поэтому сделано это исключительно ради повышения работоспосоности.


А в целом что мы получили.
Полная балансировка ссылок по блокам. Независимо от того сколько линков куплено в данный момент - они поделяться автоматически на n-ное количество порций (блоков) на странице.
Получается, если из 10 ссылко-мест выкуплены только 6 и вы задали 2 блока на странице, тогда они распределяться по ровну на каждом блоке. При увеличении количества купленных ссылок - всё будет на автопилоте распределяться. На любых страницах.
С дробными числами всё также отлично будет работать. (т.е. если ссылок куплено 5, а надо их разделить на 2 блока. В одном будет 2, в другом 3.)


Класс? :-)
Мне лично понравилась эта штука. Чисто психологически кажется, что гораздо меньше рекламы на странице.
Я продал 15 линков с главной. Вы не поверите какая там свалка была из 15 линков. Разбил их с помощью этого кода на 2 блока по левой и правой сторонам - небо и земля! Теперь кажется, что рекламы в два раза меньше, чем было, а по сути ведь - столько же.

Комментируйте пожалуйста код. Будет ли полезен он кому-нибудь? Какие-то пожелания к нему, предложения?


С Уважением, SEOCoding.
SEO Глазами Программиста

2 комментария:

Анонимный комментирует...

Отличная статья. Сам пока еще не разбираюсь в этом, но про регулирование рекламы задумывался. Добавли в избранное... А можешь рассказать в общих чертах как на Php написать простенького робота - сканера? Я вот тут пытаюсь код состряпать - Один робот топает на ресурс и берет от туда капчу, передает в другой скрипт, который анализирует капчу и возвращает готовый ответ... Такая вот штука, все вроде могу, а сканер написать даже не знаю как. Расскажи что знаешь?

SEOCoding комментирует...

Нифига себе :-)
Сканер капчи? Ну это не очень простая штука и без знаний нейро сетей и распознавания образов (целая наука отдельная) здесь точно не обойтись..
Или ты о другом сканере?