Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Контекстные ссылки и все, что с ними связано (http://forum.sape.ru/forumdisplay.php?f=28)
-   -   Контекстные ссылки в движках на Perl - тестируем модуль! (http://forum.sape.ru/showthread.php?t=11894)

mitriy 24.04.2008 12:25

Скачал код, установил.
Для замены текста использовал
Код:

$text = $sape_context->replace_in_text_segment($text);
Все работает, теперь ждем рекламодателей. :)
Кто скачал код немного раньше, обратите внимание на замечание выше
Цитата:

Реально параметр db_root_dir называется db_dir.
PS: немного не по теме. Когда удалял лишние страницы (на которых мне не нужны контекстные ссылки) случайно удалил и нужные. Теперь они не проявляются при попытке повторного поиска страниц с кодом. Что делать?

Meneldor 24.04.2008 12:27

Цитата:

Сообщение от Antuan (Сообщение 136125)
Есть вопросы. Много. Первый
Автор указывает, что Необходимо пользоваться инструкцией для Контента в РНР. Означает ли Это, что Контентный Код под ПЕРЛ надо вставлять ДО тэга < body > ?

Зависит от того, какую функцию Вы используете. Если replace_in_text_segment, то в неё Вы просто передаёте порции текста, в них модуль подставляет контекстные ссылки, если они есть, и возвращает изменённый текст. Как Вы потом собираете куски текста в код страницы - это известно только программисту конкретного движка. Это в PHP код (грубо говоря) "встраивается" в HTML, в Перле всё наоборот: скрипт на Перле отрабатывает и в течение выполнения делает вывод функцией print кода, собирая HTML-документ. Если используете функцию replace_in_page, то функцию нужно позвать после вывода HTTP-заголовков, но до вывода HTML кода.

Meneldor 24.04.2008 12:29

Цитата:

Сообщение от mitriy (Сообщение 136184)
Теперь они не проявляются при попытке повторного поиска страниц с кодом. Что делать?

По этому поводу пишите на support@sape.ru, индексация страниц - это уже к ним.

Antuan 24.04.2008 13:54

Цитата:

Сообщение от Meneldor (Сообщение 133176)

Заменить старый код вызова:
Код:

my $sape = new SAPE(...);
на новый:
Код:

my $sape = new SAPE::Client (...);
в связи с переименованием класса SAPE в SAPE::Client (старый формат вызова тоже поддерживается, однако будет отключен в будущем).

Означает ли Это, что для обычных ссылок
Это
Код:

"$ENV{DOCUMENT_ROOT}/5кодa8/SAPE.pm" =~ /^(.+)$/;
require $1;
my $sape = new SAPE(
    user => '5кода8',
    host => '<ИМЯ_ХОСТА>', # необязательно, по умолчанию: $ENV{HTTP_HOST}
    charset => 'windows-1251', # необязательно, по умолчанию: windows-1251
);
print $sape->get_links;

Надо поменять на Это
Код:

"$ENV{DOCUMENT_ROOT}/5кодa8/SAPE.pm" =~ /^(.+)$/;
require $1;
my $sape = new SAPE::Client (
    user => '5кодa8',
    host => '<ИМЯ_ХОСТА>', # необязательно, по умолчанию: $ENV{HTTP_HOST}
    charset => 'windows-1251', # необязательно, по умолчанию: windows-1251
);
print $sape->get_links;

Цитата:

Для использования контекстных ссылок необходимо сделать следующее.

Добавить код для создания объекта SAPE::Context с теми же параметрами, что передаются в конструктор SAPE::Client:
Код:

my $sape_context = new SAPE::Context (...);

Означает ли Это, что Код для Контекста будет выглядеть так:
Код:

"$ENV{DOCUMENT_ROOT}/5кодa8/SAPE.pm" =~ /^(.+)$/;
require $1;
my $sape = new SAPE::Context (
    user => '5кодa8',
    host => '<ИМЯ_ХОСТА>', # необязательно, по умолчанию: $ENV{HTTP_HOST}
    charset => 'windows-1251', # необязательно, по умолчанию: windows-1251
);
print $sape->get_links;


Meneldor 24.04.2008 15:01

Цитата:

Сообщение от Antuan (Сообщение 136245)
Означает ли Это, что для обычных ссылок
Это
...
Надо поменять на Это
...

Точно! Только текст "<ИМЯ_ХОСТА>" нужно поменять на реальный хост - например, "mysite.ru" (без кавычек):
Код:

host => 'mysite.ru'
Цитата:

Сообщение от Antuan (Сообщение 136245)
Означает ли Это, что Код для Контекста будет выглядеть так:
Код:

"$ENV{DOCUMENT_ROOT}/5кодa8/SAPE.pm" =~ /^(.+)$/;
require $1;
my $sape = new SAPE::Context (
    user => '5кодa8',
    host => '<ИМЯ_ХОСТА>', # необязательно, по умолчанию: $ENV{HTTP_HOST}
    charset => 'windows-1251', # необязательно, по умолчанию: windows-1251
);
print $sape->get_links;


А вот это неверно. SAPE::Client->get_links просто возвращает HTML-код со ссылками. Контекстные же ссылки должны подставляться в текст Вашего сайта, который Вы как-то должны передать модулю. И для этого есть три функции, их я описал в первом сообщении.

К сожалению, помогать ставить код на все площадки я не могу физически :(. Кто ставил движок на Ваш сайт? Возможно, у Вас есть знакомые Перл-программисты?

Antuan 24.04.2008 15:47

Цитата:

"<ИМЯ_ХОСТА>"
Прописано как положено: www.moi_sait.com
Цитата:

Кто ставил движок на Ваш сайт?
На свои 7 РНР-сайтов и 1 Перл-сайт Код ставил и ставлю сам :cool:

Пишу здесь подробные вопросы, потому что
01. Другим, может, поможет
02. Больше никто не пишет, хотя, наверняка сайтов 95 000: 10 = 9 500 шт в системе, наверняка, имеются. Неужели все удачно поставили?

03. Код для РНР ставят и новички. Поэтому хочется более подробного описания установки кода для контентных ссылок для ПЕРЛ

Ни в РНР, ни в ПЕРЛЕ программистом не являюсь, как и, думаю, 90% посетителей этого форума. Просто - ВэбМастер, каких много. ВэбМастер, готовый учиться и, научившись, помогать другим...

Meneldor 24.04.2008 16:06

Цитата:

Сообщение от Antuan (Сообщение 136341)
02. Больше никто не пишет, хотя, наверняка сайтов 95 000: 10 = 9 500 шт в системе, наверняка, имеются. Неужели все удачно поставили?
03. Код для РНР ставят и новички. Поэтому хочется более подробного описания установки кода для контентных ссылок для ПЕРЛ

Насчёт 2: мало кто успел попробовать, я думаю, да и перловых клиентов у САПЕ, насколько я понимаю, совсем немного. Что же касается 3, согласен, с PHP ситуация попроще, но Перл в принципе посложнее, отсюда и возникают такие проблемы... Один из основных принципов Перла - TIMTOWTDI (there is more than one way to do it), а потому вариантов установки кода - масса :).

Давайте ещё раз. В каких участках кода Вашего сайта подготавливаются данные для вывода на страницу? Например, из базы данных извлекаются статьи, новости, сообщения форума и т.п., после этого они обычно подготавливаются к выводу (например, производится расстановка тегов и т.п.) и либо выводятся на экран функцией print, либо передаются в качестве параметра шаблонизатору:
Код:

# получение данных из базы (пример из доки к DBI)
my $emps = $dbh->selectall_arrayref(
    "SELECT ename FROM emp ORDER BY ename",
    { Slice => {} }
);
unless ($html_template) {
    # вывод на экран, если шаблонизатор НЕ используется:
    foreach my $emp (@$emps) {
        print "Employee: $emp->{ename}\n";
    }
} else {
    # ИЛИ передача в качестве параметра шаблонизатору - в данном примере это HTML::Template
    $template->param(emps => $emps);
}

Так вот самый простой способ использовать КС - это найти место, где данные извлекаются из базы данных, и добавить код для подстановки в эти данные КС:
Код:

# получение данных из базы (пример из доки к DBI)
my $emps = $dbh->selectall_arrayref(
    "SELECT ename, biography FROM emp ORDER BY ename",
    { Slice => {} }
);
# поиск и замена КС в поле biography для каждого сотрудника:
$sape_context->replace_in_text_segment(\$_->{description}) foreach @$emps;

После этого поле biography будет дополнено HTML-кодом с подставленными прямо в текст этого поля КС. Само собой, поля для добавления в них КС Вы выбираете сами в зависимости от конкретной схемы БД :).

Вариант же с $sape_context->replace_in_page будет работать при скриптах такого вида:
Код:

# вывод HTTP-заголовков
print "Content-Type: text/html\n\n";
# установка перехватчика вызовов к print
$sape_context->replace_in_page;

# вывод HTML-документа
print "<html><body>Здесь будет тело документа, текст которого будет целиком проанализирован для расстановки в нём КС.</body></html>"

Или вот так:
Код:

# вывод HTTP-заголовков
print "Content-Type: text/html\n\n";
# установка перехватчика вызовов к print
$sape_context->replace_in_page;

# вывод HTML-документа
print "<html><body>Здесь будет тело документа, но только в <sape_index>этом блоке</sape_index> и ещё <sape_index>вот в этом блоке текста</sape_index> будут подставлены КС.</body></html>"

Повторюсь: вариантов масса. Я привёл лишь пару примеров, но возможно, что они добавят ясности.

Antuan 24.04.2008 17:20

В частности, движок на Файлах
При добавлении Кода в Хеадер перед print:
Цитата:

# вывод HTTP-заголовков
print "Content-Type: text/html\n\n";
# установка перехватчика вызовов к print
$sape_context->replace_in_page;
# вывод HTML-документа
print "<html><body>Здесь будет тело документа, текст которого будет целиком проанализирован для расстановки в нём КС.</body></html>"
У меня так:
Цитата:

print "Content-type: text/html\n\n";
# установка перехватчика вызовов к print
$sape_context->replace_in_page;

print qq~<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
Сайт не отображается: Белый чистый лист :(

Meneldor 24.04.2008 17:32

Цитата:

Сообщение от Antuan (Сообщение 136410)
Сайт не отображается: Белый чистый лист :(

Боюсь, что такой диагностики недостаточно :(. Нужны хотя бы сообщения из логов, чтобы увидеть, что же пошло не так. Напишите мне по ICQ, плиз.

yarnik 25.04.2008 11:59

в старой версии, если тормозит сервер, то файл == 0
в связи с чем 2 вопроса:
1. почему не сделали в старой функцию if ($response eq "") { exit; }
2. реализовано ли оно в новой версии?


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

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.