Форум 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)

Meneldor 21.04.2008 12:54

Контекстные ссылки в движках на Perl - тестируем модуль!
 
В клиентский модуль SAPE на Perl добавлена поддержка контекстных ссылок. Сам модуль сильно переписан, так что теперь структура классов соответствует структуре модуля на PHP, а название всех ключевых параметров совпадает. Желающих протестировать поддержку контекстных ссылок в модуле на Perl приглашаю в этот топик.

Для обновления модуля необходимо произвести следующие операции.
  1. Заменить старый SAPE.pm на новый (приаттачен к этому сообщению).
  2. Заменить старый код вызова:
    Код:

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

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

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

    my $sape_context = new SAPE::Context (...);
  2. Для замены контекстных ссылок в определённом фрагменте текста следует вызывать функцию replace_in_text_segment, передавая в качестве параметра функции ссылку на скаляр с текстом (лучше для экономии памяти, замена будет произведена прямо в тексте по ссылке) или просто скаляр с текстом (в этом случае текст с заменой будет возвращён в качестве результата вызова функции):
    Код:

    $sape_context->replace_in_text_segment(\$text);
    или
    Код:

    $text = $sape_context->replace_in_text_segment($text);
  3. Для замены контекстных ссылок внутри вручную расставленных в нём тегов <sape_index> ... </sape_index> или целиком внутри тега <body> ... </body>, если блоков <sape_index> ... </sape_index> в документе нет, следует вызывать одну из этих функций:
    1. replace_in_page - устанавливает перехватчик вызовов к стандартной функции print, сделана по аналогии с replace_in_page в модуле для PHP, однако с ограничениями: не работает в mod_perl, может не работать в FastCGI, выводит полученный текст только при окончании работы скрипта, а не порциями, - поэтому я лично этот метод не рекомендую, он реализован лишь для совместимости с модулем на PHP:
      Код:

      $sape_context->replace_in_page;
    2. replace_in_page_text - работает совершенно аналогично replace_in_page, однако делает замену не в тексте, который передаётся при вызовах к print, а в том тексте, который Вы передаёте в качестве параметра функции, - причём аналогично replace_in_text_segment (ссылка на скаляр или просто скаляр):
      Код:

      $sape_context->replace_in_page_text(\$text);
      или
      Код:

      $text = $sape_context->replace_in_page_text($text);
      Разница между функциями replace_in_text_segment и replace_in_page_text в том, что в первую передают куски текста, установка контекстных ссылок в которых делается целиком, а во вторую передаётся целиком HTML-документ с (опционально) блоками <sape_index> ... </sape_index>.

А вообще - читайте документацию на модуль SAPE для PHP, все параметры и функции в новом модуле SAPE для Perl теперь именуются так же, так что смело пользуйтесь параметрами verbose, multi_site (кстати, а вот и он!) и т.п.

Пожалуйста, обо всех проблемах сообщайте в этом топике, а ещё лучше - по аське 23057061.

Antuan 21.04.2008 14:48

Привет!

У меня есть Сайт на ПЕРЛ. Давно жду контекстный ссылок...
Что-то сложновато описано... Что, где меняем...
Будем пробовать (если получится...) - Дело-то хорошее... :)

Meneldor 21.04.2008 14:52

Цитата:

Сообщение от Antuan (Сообщение 133292)
Что-то сложновато описано... Что, где меняем...

Неужели сложно? Текста много, согласен, но ведь всё просто :). Если есть конкретные вопросы, задавайте, буду отвечать.

Antuan 21.04.2008 15:46

Всё, вроде, сделал (не уверен, что верно - проверю)
Но куда вписывать это?
Цитата:

$text = $sape_context->replace_in_page_text($text);

Meneldor 21.04.2008 16:08

Код:

$text = $sape_context->replace_in_page_text($text);
Вставляет контекстные ссылки в текст, который лежит в переменной $text. Реальное использование зависит от Вашего конкретного случая. У Вас может быть какая-нибудь переменная $result, или $html, или ещё как, тогда нужно указывать её.

Antuan 21.04.2008 17:00

Для меня Это сложно... :(
Подожду, кто ещё поставит и расскажет

antsv 23.04.2008 22:36

Meneldor, всё ok. Поставил - работает. Спасибо.

Единственное, что бросилось в глаза:
# db_root_dir => (необязательно) директория для файлов данных, по умолчанию: $ENV{DOCUMENT_ROOT}/<user>

Реально параметр db_root_dir называется db_dir.

Meneldor 24.04.2008 00:00

Цитата:

Сообщение от antsv (Сообщение 135828)
Реально параметр db_root_dir называется db_dir.

И правда - упустил! Спасибо, исправлю!

Antuan 24.04.2008 03:16

Ещё помучился часов 5 методом тыка... Не получилось... Не находит Код на страницах
Хорошо бы на примере описать или То же самое другими словами...

Сейчас появилось объявление об этом Коде. Надеюсь народ подтянется и вместе решим свои проблемы... Для Информации: мой движок - Web-APP

Antuan 24.04.2008 10:45

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


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

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