скрипты для сайта perl

Скрипты для сайта perl

Давайте разберем подробнее скрипт, который мы использовали для проверки работы Perl:

Обратим внимание на то, что каждая строка (кроме первой) должна заканчиваться точкой с запятой (;)

Роль первой строки

Она заставляет веб-сервер искать Perl-интерпретатор perl.exe в директории C:\USR\bin\. Строка может варьироваться в зависимости от того, где у вас расположен интерпретатор Perl.

Если вы указали путь неправильно, Apache выдаст непонятное сообщение об ошибке, а в errors.log появится сообщение: «couldn’t spawn child process». В этом случае проверьте первую строку в скрипте.

Зачем в скрипте нужна строка «print Content-type»?

Попробуйте убрать из Perl-скрипта, предназначенного для вывода веб-страницы на браузер, строку:

print «Content-type: text/html\n\n»;

Почему Perl требует, чтобы эта строка предшествовала выводу информации на браузер? Попробуем разобраться, воспользовавшись бесплатной утилитой HttpRevealer. Эта небольшая программа для веб-разработчиков позволяет увидеть диалог между браузером и веб-сервером.

Установим эту программу и введем в браузер адрес сайта, например, http://dmoz.org/.

скрипты для сайта perl. perl dmoz. скрипты для сайта perl фото. скрипты для сайта perl-perl dmoz. картинка скрипты для сайта perl. картинка perl dmoz. Давайте разберем подробнее скрипт, который мы использовали для проверки работы Perl:

Как только вы нажмете «Enter», ваш браузер подключится к серверу (в данном случае, это dmoz.org.) и запросит главную страницу сайта. Получив запрос браузера, веб-сервер отвечает ему, возвращая главную страницу сайта. Просто, да?

Создается впечатление, что браузер и веб-сервер разговаривают друг с другом? Так и есть! Они говорят так же, как это делаем мы. Но разговаривают они не на человеческом языке, а на языке команд HTTP-протокола.

Давайте посмотрим, что они «говорят»:

скрипты для сайта perl. perl hrdmoz. скрипты для сайта perl фото. скрипты для сайта perl-perl hrdmoz. картинка скрипты для сайта perl. картинка perl hrdmoz. Давайте разберем подробнее скрипт, который мы использовали для проверки работы Perl:

Выше приведен скриншот HttpRevealer. Верхняя панель отображает запрос браузера, а нижняя панель показывает ответ веб-сервера.

Не пугайтесь незнакомых слов. Сейчас мы все объясним. Если вы посмотрите на первую строку HTTP-запроса в верхней панели, то увидите:

GET / HTTP/1.0

По-русски это означет: «Эй, господин веб-сервер, я пришёл, чтобы получить документ, расположенный в корневом каталоге вашего сайта. Я общаюсь с вами по HTTP-протоколу версии 1.0». «.

Теперь, посмотрите, что отвечает веб-сервер:

HTTP/1.1 200 OK
.
Content-Type: text/html

Вот так все просто! Но не стоит забывать, что мы смотрим этот диалог для того, чтобы выяснить, почему Perl требует наличия в скрипте строки «print Content-type», для того, чтобы он работал правильно.

Источник

Начинаем работать с Perl

Как вы видите, каждое выражение заканчивается точкой с запятой, строка заключается в апострофы.

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

В результате будет выведена строка «$a\n’»

Если использовать код

то с новой строки будет выведена сообщение «hello world»

Всегда проверяйте правильность строк внутри двойных кавычек.

В системе Linux вы можете первой строкой написать #!/usr/bin/perl и использовать команду chmod для того чтобы сделать файл скрипт выполняемым. Тогда для запуска скрипта вам нужно будет только написать его имя, например ./scriptname.pl. Обычно строки, начинающиеся со знака # являются комментарием, но первая строка в *nix указывает системе интерпретатор скрипта.

Программирование, как правило, включает блоки данных или команд, которые используются внутри циклов, и Perl не является исключением. Фактически он был спроектирован для работы с текстовыми файлами, то есть читает информацию находящуюся внутри них или со стандартного ввода (набор на клавиатуре) или из списка файлов в командной строке. Вот простой пример скрипта:

Сохраните файл как test.pl и запустите его используя следующую команду:

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

Для задания условий в цикл while используются значки <>. Специальное указание «<>» означает что используется стандартный ввод, а специальная переменная «$_» означает текущую строку ввода. Таким образом, скрипт читает строку со стандартного ввода и выводит её. Если вы просто наберете perl test.pl, он будет ожидать пока вы наберете какую-нибудь строку и затем выведет её, и так будет продолжаться пока вы не нажмете Ctrl & D, что будет означать конец скрипта.

» сравнивает совпадают ли переменные, а оператор «!

» проверяет несовпадение. Добавть в конец скрипта следующий строки и запустите его командой perl test.pl test.pl:

Результатом будут две строки кода и перед каждой примерно такое сообщение: «Fred is here, line 7.»

Теперь нас есть простой скрипт, который ищет в файле слово «Fred», но для чего мы можем его использовать?

Например, его легко встроить в какой-нибудь полезный CGI скрипт, скажем, для поиска строки в таблице данных.

Давайте используем некоторые данные: составим простую таблицу с контактными номерами телефонов. Она будет содержать имя человека, и два номера.

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

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

Затем команда open читает файл, расположенный в той же директории, что и скрипт, CSV файл, который мы создали в Excel; в качестве идентификатора файла используется имя «CONTACTS». Его мы будем использовать в цикле while для чтения файла. Поскольку все данные разделены запятой, мы можем записать их в различные переменные.

Первая команда next if нужна для пропуска следующей итерации цикла; мы убеждаемся, что не выведем строку, содержащую заголовок, который Excel добавляет в CSV файл. Вторая команда используется для нескольких вещей; здесь есть сравнение, с которым мы знакомились раньше, но в конце используется маленькая буква i, которая заставляет Perl игнорировать блок.

Эта часть проверяется на совпадение и пропускаются все строки, кроме совпадающих, скрипт завершает работу, выдав все контакты, которые найдет.

Чтение списка контактов из CSV файла с помощью Perl

Источник

Perl и CGI-программы – особенности использования

Разработчики сайтов и администраторы нередко сталкиваются со скриптами CGI (микросценариями обработки текстовых данных). Они применяются при создании интерактивных страниц, содержание которых зависит от действий пользователя. Например, это могут быть формы регистрации или отправки комментариев. Также есть «невидимая» область применения – сбор и обработка информации о посетителях при помощи файлов cookies.

Что такое CGI и PERL

Важно понимать, что CGI – не язык программирования, а протокол передачи данных веб-серверу через stdin и их прием из stdout. В качестве обработчика команд используется любая программа с поддержкой функций потокового ввода-вывода. Например, написанная на языке Perl. Главное, что от скрипта требуется «умение» заполнять таблицы в базе данных и получать данные из них путем подачи запроса, чего никогда не сделать средствами HTML.

скрипты для сайта perl. 23c70d0799a91386123d740d485f836a. скрипты для сайта perl фото. скрипты для сайта perl-23c70d0799a91386123d740d485f836a. картинка скрипты для сайта perl. картинка 23c70d0799a91386123d740d485f836a. Давайте разберем подробнее скрипт, который мы использовали для проверки работы Perl:

Особенности применения языка Perl:

В качестве альтернативы Perl все чаще применяется язык программирования Python, но администраторы «старой закалки» продолжают придерживаться классики создания CGI-скриптов, так как поддержка Perl «по умолчанию» имеется в большинстве дистрибутивов Linux. Поэтому программы на нем начинают работать без предварительной подготовки сервера. Формально же скрипты можно писать на чем угодно – хоть на C/C++, Pascal, Java или Visual Basic.

Использование готовых скриптов

Если CGI-скрипт уже готов (используется стандартный модуль), перед использованием его нужно скопировать на сервер хостинга. Выполняется процедура при помощи файлового менеджера в панели управления или через FTP-доступ, например программой FileZilla. Выбор расположения остается на усмотрение пользователя; к программе можно обращаться независимо от имени каталога или подкаталога, но рекомендуется придерживаться определенных стандартов.

Так, внутри скриптов обязательно указывается путь к интерпретатору используемой платформы для программирования:

Если здесь допустить ошибку, программный код исполнятся не будет. То же происходит, если в ПО предусмотрено обращение к базе данных MySQL – пользователю понадобится внести в программу путь к ней, логин и пароль доступа. При изменении последнего корректировка CGI-скрипта обязательна, иначе он перестанет работать. Местоположение файлов в популярных CMS выясняется в службе технической поддержки или в служебной документации.

Написание простейшего CGI-скрипта

При работе в среде операционной системы Windows для написания кода понадобится специальная программа. Например, подойдет специализированный текстовый редактор Notepad++ (стандартный Блокнот для таких целей не подходит). Сам код строится вокруг переменных окружения и потоков ввода-вывода информации. По сути, CGI-скрипты являются обработчиками отдельных команд и не являются «полноценной» программой.

скрипты для сайта perl. f66e68403117157c5cf9fa58c4919ac7. скрипты для сайта perl фото. скрипты для сайта perl-f66e68403117157c5cf9fa58c4919ac7. картинка скрипты для сайта perl. картинка f66e68403117157c5cf9fa58c4919ac7. Давайте разберем подробнее скрипт, который мы использовали для проверки работы Perl:

Главное, избегать использования SHELL, который снижает безопасность сайта. В качестве примера простейшего CGI-скрипта приведем код для вывода текущей даты и команду HTML, при помощи которой будет происходить обращение к программе (из любой части страницы, хоть в нескольких местах одновременно).

При помощи специального виджета, установленного в CMS, или путем ручного редактирования шаблона в нужный участок HTML вставляется код:

В приведенном примере решена типовая ошибка новичков. Она заключается в отсутствии метки о типе выводимого результата (строка Content-type: text/html). После нее располагается пустая строка для указания, что следом идет непосредственно программный код.

Просмотр установленных модулей PERL

Проверить ранее подключенные PERL-модули можно командой vim. Перед ее вводом необходимо подключиться к серверу хостинга по защищенному каналу SSH. После авторизации нужно ввести в консоли:

В результате будет создан файл с указанным названием. Следующий шаг – открыть его в текстовом редакторе и изменить содержимое на следующий код:

Источник

Perl’ы для веб-мастера

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

Что необходимо знать о сервере

Прежде чем писать CGI-скрипты, необходимо узнать некоторую информацию о сервере, на котором эти скрипты будут работать. Всю эту информацию можно получить у провайдера, где находится сайт. Бесплатные службы, предоставляющие место под страницы, обычно размещают такую информацию в своих «хелпах», в разделах, посвященных CGI и т. п. Адреса серверов, которые разрешают выполнение CGI-скриптов, мы публиковали в прошлом номере МК.

Наиболее важный параметр из тех, что необходимо знать — путь к интерпретатору Perl на сервере, который следует указывать в первой строке каждой программы, написанной на Perl. Обычно она имеет вид:

Такую строку мы будем использовать в дальнейших примерах.
Еще обязательно знать полный путь к cgi-bin-директории вашего сайта и полный путь к его основной (корневой) директории. Это не адрес, начинающийся с http:// — это полный путь от корневой директории сервера, на котором находится ваш сайт, и имеющий вид:

Чтобы скрипт имел возможность отправлять письма, понадобится узнать путь к почтовой программе (sendmail). Он может выглядеть примерно так:

Инструменты

Для написания скриптов на Perl’е, не обязательно устанавливать какой-либо специальный софт — подойдет и любой текстовый редактор, тот же «Блокнот», входящий в состав Windows. Но все-таки упомяну пару инструментов, которые помогут упростить написание и отладку скриптов. Прежде всего, понадобится интерпретатор Perl для Windows, который можно загрузить со страницы http://www.activestate.com/ActivePerl/download.htm (либо выбрать другие варианты адресов с сервера http://www.perl.com/). А для программирования и отладки самый удобный, на мой взгляд, инструмент — это Perl Builder (http://www.solutionsoft.com/). Кроме пошаговой отладки с возможностью просмотра по ходу значений переменных, имеется функция автоматической генерации некоторых скриптов. А вообще, существует достаточно много различного программного обеспечения, которое помогает в создании и отладке программ на Perl — мы обязательно с ним ознакомимся в дальнейшем.
То, что я описал эти инструменты именно сейчас и буду время от времени упоминать о них в статье, не означает, что они обязательны. Вы спокойно можете набирать все примеры в Блокноте, просто тогда вы не сможете производить отладку скриптов в процессе их написания — это прийдется делать прямо на сервере.

Создаем счетчик посещений

Есть множество рейтингов, предоставляющих счетчики посешений, собирающих статистику. Взамен они требуют установить у вас на сайте свою кнопку. Но что делать, если вы не гонитесь за высоким положением в рейтинге и не желаете вставлять в свою страницу кнопку рейтинга? Вам просто нужно считать посетителей и собирать некоторую статистику. Или почему бы не проконтролировать правильность информации, собранной чужим счетчиком? А может, вы хотите создать собственный рейтинг? ОК, давайте сделаем сначала простейший счетчик, а затем превратим его в систему сбора статистики и удобного просмотра собранной информации. А заодно и научим генерировать картинку счетчика.

Начнем с простейшего текстового счетчика. Правда, чтобы он работал, необходима поддержка сервером инструкций SSI (Server Side Includes) — об этом также узнайте у хостинг-провайдера.

Создайте в текстовом редакторе два файла и сохраните их на своем диске с именами count.cgi и count.txt соответственно. Второй из них пусть будет пустым, а в первом наберите следующий текст:

Теперь с помощью FTP-клиента скопируйте оба файла в cgi-bin-директорию своего сервера. Отметим, что делать это надо в режиме ASCII. После этого установите права доступа (команда CHMOD) для count.cgi — 755, а для count.txt — 666. Осталось вставить вызов скрипта в HTML-страницу. В том месте страницы, где вы хотите увидеть счетчик посещений вставьте строку:

где /cgi-bin/count.cgi — полный путь к файлу скрипта от корневой директории вашего сайта. Т. е. если полный путь к скрипту выглядит как http://your-domen.com/cgi-bin/count.cgi, то в вызове скрипта пишем /cgi-bin/count.cgi.

Теперь можно загрузить страницу на сервер и открыть ее в браузере. Вы увидите цифры — показания счетчика, увеличивающиеся при каждом вызове страницы. Осталось разобраться, что же мы такое сделали.

Чтобы вы хоть немного могли понимать, о чем идет речь, предлагаю некоторые начальные сведения о том, «что есть что в Perl».

Итак, о том, что первая строка скрипта указывает, где искать интерпретатор Perl, вы уже знаете.

открывает файл count.txt для чтения, связывая название файла с дескриптором COUNTFILE;

если в конце считанной строки присутствует символ перевода строки (в Perl имеет вид » «) — он будет удален. В нашем случае такого символа нет. Но лучше перестраховаться, чем потом искать непонятные ошибки.

увеличиваем значение счетчика на единицу. Эту операцию можно также записать вот так:

но для наглядности будем использовать предыдущий вариант.

откроем файл count.cgi для записи, уничтожив (символ «>») его содержимое

запишем в файл новое значение счетчика

передаем новое значение счетчика в качестве результата работы скрипта, чтобы сервер включил это значение в состав HTML-страницы — в том месте, где находится строка

конец выполнения программы (без этого можно обойтись, но почему бы не следовать традициям).

Небольшие усовершенствования нашего счетчика

Теперь точность показаний счетчика стала немного выше. Но как он поведет себя, если на нашу страницу зайдет одновременно два посетителя? Одновременно два процесса попытаются произвести запись в файл с показаниями счетчика, в результате чего все данные файла могут быть потеряны. Чтобы этого не допустить, необходимо запретить одновременный доступ к файлу нескольких процессов. Сделать это можно с помощью функции flock, которая позволяет заблокировать файл, связанный с дескриптором, от доступа из других скриптов. Немного изменим процесс работы с файлом count.txt:

Теперь поясненим наши действия.
1) Открываем файл для чтения и записи:
open (COUNTFILE, «+

Источник

быстрое создание веб-приложений на Perl: вводная

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

Хочется рассмотреть простую ситуацию, которая по моему мнению, часто имеет место быть при разработке малых и средних проектов. А ситуация такая: необходимо создать небольшой (средний) сайт, причем принимается решение отказаться от CMS, так как движок нужен небольшой, наворотов в админке не нужно, сложность примерно 16-24 человеко/часов. Для примера требуется небольшой сайт, который будет содержать статьи определенного типа (обычные текстовые статьи) и новости. Плюс небольшая админка для добавления статей и новостей. Условимся, что у нас есть «большая» разница между этими двумя типами контента в рамках этой статьи.

Проблема

В таких ситуациях довольно часто принимается решение написать свой велосипед, то есть движок. Рассмотрим именно такую ситуацию, на примере которой рассмотрим так же прелести Perl и CPAN.
Полноценную реализацию MVC не предлагаю, это слишком много для нашего маленького проекта. Для Perl написан вагон и маленькая тележка фреймворков (как MVC, так и не очень), например отличный Catalyst, который очень и очень похож на RubyOnRails (или наоборот, я не в курсе хронологии). Так же есть множество поменьше, для любопытствующих стоит взглянуть сюда.

Ничего военного, сюда вносятся глобальные параметры проекта и экспортируются.

Данные

Структура БД

Вернемся к движку. Пункт первый — это работа с данными, за нее у нас будет отвечать пакет DBIx::Class, который включает несколько модулей. Для начала создадим простую БД, с которой мы будем работать. Не стоит критично относится к структуре базы, она максимально простая, так же синтаксис без всего лишнего, минимизируем затраты.
create table users (
id smallint not null primary key auto_increment,
name varchar(32) not null,
pass varchar(32) not null);

create table categories (
id int not null primary key auto_increment,
name varchar(128) not null) charset cp1251;

create table articles (
id int not null primary key auto_increment,
category_id int not null,
title varchar(255) not null,
content text not null,
author varchar(128) not null comment ‘Author of article’,
added_at timestamp not null,
added_by smallint not null comment ‘Admin user ID’) charset cp1251;

create table news (
id int not null primary key auto_increment,
added_at timestamp not null,
title varchar(255) not null,
content text not null,
is_put_on_main bool not null default 0 comment ‘Show on main page?’,
added_by smallint not null) charset cp1251;

Таблица пользователей содержит самые основные данные (учет посещений и прочих нас пока не волнует), таблица categories содержит разделы статей, например «автомото», «спорт», «кулинария» и т.п., таблица articles содержит собственно статьи, а таблица news — новости. В последней есть поле is_put_on_main, которое отвечает за показ новости на главной. Так же почти в каждой таблице я задаю кодировку — это привычка, кто уверен — не делайте.

Отображение в код

Хорошо, таблицы у нас есть, теперь необходимо отобразить их в коде. Модуль DBIx::Class позволяет полностью отойти от написания SQL-кода и общаться с таблицами, как с объектами. Работать с этим модулем можно двумя способами: либо вручную описывать структуры каждой таблицы, либо воспользоваться автоматикой. Рассмотрим оба способа по порядку.

Ручной метод

Смотрим в код, далее будут пояснения. Создадим в корне нашего проекта папку с именем DB и в ней создадим четыре файла: User.pm, Category.pm, Article.pm, News.pm, вот содержимое этих файлов.
# file User.pm
package DB::User;

use base qw/DBIx::Class/;

__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table(‘users’);
__PACKAGE__->add_columns(qw/id name pass/);
__PACKAGE__->set_primary_key(‘id’);

# file Category.pm
package DB::Category;

use base qw/DBIx::Class/;

__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table(‘categories’);
__PACKAGE__->add_columns(qw/id name/);
__PACKAGE__->set_primary_key(‘id’);

# file Article.pm
package DB::Article;

use base qw/DBIx::Class/;

__PACKAGE__->load_components(qw/InflateColumn::DateTime PK::Auto Core/);
__PACKAGE__->table(‘articles’);
__PACKAGE__->add_columns(qw/id category_id title content added_by author/);
__PACKAGE__->add_columns(‘added_at’ => < data_type =>‘timestamp’ >);
__PACKAGE__->set_primary_key(‘id’);

__PACKAGE__->belongs_to(‘category’ => ‘DB::Category’,
< 'foreign.id' =>‘self.category_id’ >);
__PACKAGE__->belongs_to(‘user’ => ‘DB::User’,
< 'foreign.id' =>‘self.added_by’ >);

# file News.pm
package DB::News;

use base qw/DBIx::Class/;

__PACKAGE__->load_components(qw/InflateColumn::DateTime PK::Auto Core/);
__PACKAGE__->table(‘news’);
__PACKAGE__->add_columns(qw/id title content is_put_on_main added_by/);
__PACKAGE__->add_columns(‘added_at’ => < data_type =>‘timestamp’ >);
__PACKAGE__->set_primary_key(‘id’);

__PACKAGE__->belongs_to(‘user’ => ‘DB::User’,
< 'foreign.id' =>‘self.added_by’ >);

1;

Итак, небольшие пояснения. Имеем четыре очень похожих файла, сначала объявляем базовым модуль DBIx::Class, далее используя механизм __PACKAGE__ вызываем его методы, а именно: load_components — загружаем компоненты для нашего модуля (PK::Auto для работы с автоинкрементированными primary_key, Core — основной набор для работы со связями, строками и столбцами). Далее указываем таблицу, после чего добавляем названия столбцов. Для работы со столбцами таких типов, как datetime, date и timestamp используется небольшой модуль InflateColumn::DateTime. С помощью него поля указанных типов можно использовать в программе, как объекты типа DateTime, со всеми вытекающими удобствами. После чего указываем primary key (если он составной, то указываем несколько полей set_primary_key(qw/name1 name2/);.
Далее находятся знакомые для знающих RubyOnRails методы has_many(), belongs_to() и другие. Эти методы предназначены для создания связей между таблицами.
Документация по чудному модулю DBIx::Class, где все подробно описано, включая туториал и cookbook.

Теперь нам нужно использовать сие чудо, для этого нам нужен модуль DBIx::Class::Shema, который является абстракцией схемы данных. В корневой папке проекта создаем файл с именем, идентичным имени папки с классами, описывающими таблицы, в нашем случае это будет DB.pm Вот как он выглядит у меня.
package SDB;

use base qw/DBIx::Class::Schema/;
use Conf;

Автоматический метод

В «ручном» примере мы вручную задавали все связи между таблицами. Существует модуль DBIx::Class::Shema::Loader, который выполняет загрузку и создание классов автоматически. Для этого необходимо добавить в структуру БД описание внешних ключей (foreign keys). Используя их загрузчик автоматически создаст необходимые связи. Вот как это выглядит:
package DB;
use base qw/DBIx::Class::Schema::Loader/;

__PACKAGE__->loader_options(
inflect_singular => 1,
components => qw/InflateColumn::DateTime/
);

Использование схемы

Теперь посмотрим, как это все вместе используется непосредственно в коде.
use DB;

# Удаление статьи
$sch->resultset(‘Article’)->find( < id =>$aid >)->delete;

Далее, покажем наши данные.

Отображение

Я использую систему шаблонов Template Toolkit. Есть еще несколько систем, например Mason, но так исторически сложилось, что мой выбор пал на Template Toolkit.
Template Toolkit — это система обработки шаблонов. Посмотрим ее использование сразу на примере. Для начала создадим в корне проекта папку tmpl и в ней создадим папку site. В папке tmpl/site создадим файл site следующего содержания:
Portal

use CGI;
use Template;

Итак, подробно описывать не имеет смысла, так как все довольно явственно. Единственное, это использование параметров rows/page. Они необходимы для создания так называемых pager-ов, с помощью которых удобно организовывать постраничный вывод, а так же применяются для простого отбора записей, что является частным случаем. Так же кол-во статей и новостей можно вынести в конфиг.

Далее, изменим шаблон start_page:

Новости

[% FOREACH n = news %]
[% n.added_at.dmy(‘.’) %] [% n.title %]

[% n.content FILTER html %]

Статьи

[% FOREACH a = articles %]
[% a.added_at.dmy(‘.’) %] [% a.title %]

Раздел: [% a.category.name %]
[% a.content FILTER html %]

[% END %]

Отмечу использование поля added_at, как объекта. Для него вызывается метод dmy(), который форматирует дату в формат ДД-ММ-ГГГГ с переданным разделителем, в нашем случае точка. Объект DateTime поддерживает локали и корректно отображает дату в зависимости от текущей (или выбранной) локали. Так же он содержит множество методов для форматирования и работы с датами.

Я пока намеренно не добавлял валидные ссылки, сделаю это позже.
В целом мы видим два похожих блока, которые стоит вынести в отельный файл. Создадим файл short_note в папке tmpl/site:
[% text = node.content;
IF text.length > 512;
text = text.substr(0, 512);
END %]
[% note.added_at.dmy(‘.’) %] [% note.title %]

[% IF note.category %]
Раздел: [% note.category.name %]
[% END %]
[% text FILTER html %]

Теперь наш шаблон start_page примет такой вид:

Новости

Статьи

[% FOREACH a = articles %]
[% PROCESS short_note note = a %]
[% END %]

Теперь мы вызываем обработку шаблона short_note и передаем ему в качестве параметра note текущую новость или статью.

В шаблоне выполняется проверка на наличие поля category, что у нас будет признаком статьи, в этом случае мы выводим название раздела.

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

Управление

s/\D//g if ($p<'id'>);

То есть, если у нас есть какой-то номер, будь то статьи, новости или каталога, то мы вырежем оттуда все не-цифры. Простой и дубовый метод.

Администрирование

Для администрирования необходимо создать некий инструмент. С точки зрения модели построения админка ничем не отличается от вышеприведенной системы, кроме авторизации и нюансов с текстом. Рекомендутеся создать отдельную папку для шаблонов, например tmpl/admin.
Для авторизации я использую два инструмента: Digest::SHA1 и CGI::Session. Первый обеспечивает шифрование, второй — сессии.
Итак, рассмотрим на простом примере применение этих инструментов. Пример намеренно упрощен до безобразия.

Шаблоны:
[%# Шаблон login %]
[% IF err %]
Wrong login
[% END %]
/>
Login: />
Password: />
/>

В скрипте админки нужно дописать вход и выход из системы, а так же сессии:
use CGI::Session;
use Digest::SHA1 qw(sha1_hex);

Следующий нюанс касается создания форм для ввода данных. Во-первых, необходимо создать так называемые CRUD-методы (CReate, Update, Delete). Для этого, например, существует модуль DBIx::Class::WebForm. Так же по запросу CRUD на CPAN можно найти еще несколько подобных модулей.
Во-вторых, необходимо организовать удобный ввод текста статей и новостей. Лично я использую FCKeditor, хотя есть множество других. Такие редакторы довольно просто интегрируются в страничку и дают пользователям удобство и счастье в жизни.
В-третьих, стоит позаботится о валидации данных из форм. Например, модуль DBIx::Class::Validation проверяет данные перед отсылкой в базу, так же есть всевозможные валидаторы данных из форм, которые работают совместно с виджетами или формами, например CGI::FormBuilder, CGI::QuickForm и т.д. По запросу «Form», «Validate» или «Widget» можно найти множество модулей для этих целей.

Заключение

В этой «небольшой» заметке я хотел поделиться своим небольшим опытом в создании простых приложений. Заметка вышла не маленькая, но, надеюсь, информативная. Приведенный здесь метод создания приложений очень эффективен в плане повторного использования, единожды созданные кусочки сайта можно потом использовать в других местах, почти ничего не меняя. Так же мы достаточно эффективно разделили вид и код, а так же абстрагировались от непосредственного написания SQL-запросов.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *