Navigation

Документация на ArtPublishing

  • Chapter 1 Основные концепции
  • Система разработки сайтов ART-PUBLISHING/C
  • Chapter 2 Язык шаблонов AP
  • Создание С++ модулей для ArtPublishing
  • Chapter 3 Функции




    • Chapter 1 Основные концепции

      « вернуться




      В концепцию AP заложен объектный подход к построению сайта. Целью разработчика на AP является создать простой, легко
      конфигурируемый и изменяемый сайт, максимально используя объектно-ориентированные возможности AP. Например, для создания
      подраздела необходимо определить только те блоки веб-страницы, которые будут изменяться у этого раздела по сравнению
      с главными шаблонами внутренних страниц. Идеально, если эти изменения будут нести только текст с минимальным количеством
      верстки. Это разделение целиком на совести разработчика, AP лишь инструмент и если его правильно использовать задача
      поддержки сайта многократно упростится по сравнению с классической технологией.



      « вернуться




    • Схема работы системы

      « вернуться





      Art-Publishing (в дальнейшем AP) является средством объектного подхода к разработке интернет-сайтов. Целью его использования
      является уменьшение доли повторяющегося кода и облегчении поддержки разработанной системы.

      AP представляет собой CGI-приложение2,
      обрабатывающее запрос браузера клиента (URL) и выдающее в качестве ответа на запрос построенную веб-страницу.
      Правила построения веб-страницы и являются основной идеей AP, отличающего его от ряда других продуктов подобного
      назначения.

      Объекты, участвующие в системе:

      Браузер клиента
      производит запрос к серверу, отправляя ему URL, POST-данные, COOKIES и др.

      Ядро AP
      запускается при каждом обращении к домену, на котором установлен AP и выполняет
      запрос к контейнеру объектов за требуемым в URL шаблоном. Затем производит синтаксический анализ и в зависимости
      от его результатов, обращается к контейнеру объектов за необходимыми составляющими страницы.
      Контейнер объектов
      получает от Ядра AP путь, по которому ожидается наличие объекта и, в
      соответствии со логикой наследования возвращает содержимое объекта и его реальное местонахождение (возможно, не
      совпадающее с затребованным). За содержимым объекта Контейнер объектов обращается в Кэш,
      решающий, откуда брать данные - из пула кэша или из поставщика данных.
      Кэш
      При первом обращении выполняется обращение к поставщику данных, после чего адрес и данные заносятся в пул кэша
      и уже при следующем обращении с теми же параметрами возвращаются данные из пула.
      Поставщик данных
      выполняет физическое обращение к области хранения данных (БД или файловая система) по реальному
      адресу и возвращает контейнеру объектов содержимое.

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

      Ядро AP включает в себя синтаксический анализатор языка AP, и определение синтаксических конструкций.
      Синтаксис языка и определения конструкций описаны в разделе на стр..




      « вернуться




    • Модульность разработок

      « вернуться




      Все дополнительные возможности к AP поставляются в виде модулей, поставляемых в исходных текстах на языке шаблонов AP ( см. раздел ).
      В их числе:

    • модули, расширяющие возможностей AP (напр, система управления БД сайта)
    • модули, расширяющие функционал сайта, созданного на AP (напр, модуль форумов)

    Модули поставляются в виде файла, содержащего в себе:

  • код, реализующий функционал модуля на языке шаблонов AP
  • шаблоны, содержащие интерфейсную часть модуля
  • вспомогательные файлы: изображения, иконки
  • вспомогательные таблицы в БД




    « вернуться




  • Технические требования

    « вернуться




    Система написана на C++, в настоящее время имеется реализация для Win32, Linux и FreeBSD. Система поставляется
    в виде исполняемого модуля, файла конфигурации и простейшего сайта-примера.

    Сущность работы исполняемого модуля сводится к анализу переданного ему URL, и возврата в браузер соответствующей этому
    URL веб-страницы. Для "прозрачного" включения в сайт ядра AP, выполняющего эти функции используется механизм
    modRewrite, поставляемый в качестве модуля к веб-серверу Apache.

    Соответственно, необходимыми техническими требованиями к AP являются:

  • Операционная система, под которую скомпилированы исполняемые файлы AP, веб-сервер Apache и, для версии, использующей MYSQL, необходимо наличие СУБД Mysql.
  • Веб-сервер APACHE
  • Необходимо наличие модуля modRewrite для Apache.
  • HTTP и FTP-доступ к ресурсам веб-сервера, желателен SSH/Telnet доступ.
  • Возможность размещения и исполнения CGI-скриптов на веб-сервере.
  • Для версии, использующей MYSQL, необходимо наличие в числе хостинговых сервисов СУБД MYSQL




    « вернуться




  • Инсталляция

    « вернуться




    Инсталляция ARTPUBLISHING сводится к настройке веб-сервера (при
    необходимости), настройке СУБД-сервера MYSQL (при необходимости) и
    настройке конфигурационного файла.


    « вернуться

    « вернуться




    Ручная инсталляция используется в том случае, если конфигурация системы не позволяет выполнить автоматическую.
    Для ручной инсталляции необходимо разместить исполняемый файл (ap или ap.exe) и файл конфигурации (ap.cfg), скомпилированный для вашей системы в каталог для
    исполняемых файлов (в большинстве инсталляций операционных систем он называется cgi-bin или vcgi)

    Выполнить команду chmod 755 ap или иным путем выставить флаг исполнимого на файл ap.

    Внести коррективы в файл ap.cfg согласно инструкциям в файле.

    Проверить, есть ли файл в корне веб-сервера с именем .htaccess? Если нет - создать.

    Проверить, есть ли в нем строка RewriteEngine On? Если строка есть (была до инсталляции AP)-
    требуется анализ других строк, иначе универсальных инструкций для того,
    чтобы заработал ArtPublishing нельзя дать.

    Если строки RewriteEngine On нет - впишите в начало .htaccess текст:

    RewriteEngine On

    RewriteRule ^ img - [L]

    RewriteRule ^ (.*) /cgi-bin/ap/$1 [PT]

    После слова RewriteRule необходимо поставить по одному знаку табуляции вместо изображенных выше пробелов.

    ВНИМАНИЕ! Никакие каталоги, кроме img в обычном режиме видны не будут. Для того, чтобы они были доступны, нужно поставить строку, наподобие

    RewriteRule ^directory - [L]

    после строки RewriteRule On.

    Проверить - обращение к корню веб-сервера
    your-domain/ должно выводить индексную страницу сайта, поставляющегося вместе с дистрибутивом.




    « вернуться

    « вернуться




    Для нормальной работы ArtPublishing требуются веб-сервер,
    поддерживающий CGI и RewriteEngine.

    CGI необходим для запуска ядра паблишинга при вызове каждой из страниц
    сайта. Документация по Common Gateway Interface расположена на сервере
    NCSA HTTPd.

    RewriteEngine требуется для перенаправления почти всех запросов к
    домену на CGI-программу, ядро паблишинга.

    Основным веб-сервером на котором осуществлялось тестирование и
    эксплуатация паблишинга является веб-сервер Apache.

    Apache представляет механизм CGI для запуска программ на сервере,
    выполняющих обработку данных и потоковую выдачу HTML. Для проверки
    может ли ваш сервер выполнять CGI-скрипты, нужно:

    • найти в предоставленном провайдером папку cgi-bin или vcgi;
    • создать там файл test.sh (скачать)
    • открыть страницу http://ваш-домен/cgi-bin/test.sh
    • должна появиться информация типа:

       
      SERVER_PORT=80
      GATEWAY_INTERFACE=CGI/1.1
      PWD=/mnt/projects/1/ap/server/vcgi
      HTTP_USER_AGENT=Mozilla/5.0 Galeon/1.2.0 (X11; Linux i686; U;)
      Gecko/20020408
      REMOTE_PORT=1729
      HTTP_HOST=ap.internal
      HTTP_CONNECTION=close
      HTTP_ACCEPT_ENCODING=gzip, deflate, compress;q=0.9
      

    Если все получилось, то значит CGI настроен правильно. Теперь нужно
    найти версию ArtPublishing, скомпилированную под вашу операционную
    систему.

    При запуске из консоли Unix ядро не должно писать какие-либо ошибки.
    Нормальным его поведением является следующая инфромация:

     
     [root@localhost cgi-bin]# ./ap 
     Content-type: text/html
     (null)[root@localhost cgi-bin]# 
    

    Если ArtPublishing не запустился (виснет, выдает системные ошибки)
    при том, что CGI работает корректно, то требуется более внимательное
    изучение конкретной ситуации.

    Некоторые из наиболее часто встречающихся ошибок:

    • ArtPublishing не находит требуемых системных библиотек (mysql,
      c++)
    • ArtPublishing скомпилирован под другую версию операционной
      системы

    На этом настройка веб-сервера завершена.


    « вернуться





  • Автоматическая инсталляция

    « вернуться




    Для инсталляции системы необходимо скопировать на FTP в директорию CGI-BIN (или иную, выделенную веб-сервером для исполняемых файлов)
    установочный файл install.sh (для версии под Win32 - install.bat) и архивный файл install.tar.gz (для версии под Win32 install.zip).

    Для версии под Win32 также поставляется программа распаковки архивных файлов unzip.exe. Для *nix-версий предполагается,
    что в составе ОС имеются утилиты tar и gzip. При необходимости их можно получить на http://gnu.org .

    После инсталляции необходимо поправить файл ap.cfg, согласно инструкциям в файле.




    « вернуться

    « вернуться



    Файл ap.cfg текстовый и содержит ряд обязательных и необязательных полей. Строки в файле двух видов - обозначение группы,
    в квадратных скобках, и обозначение констант, в форме константа="значение". Обе кавычки или
    закрывающая кавычка могут отсутствовать. Лишние пробелы в конструкции, кроме
    пробелов в тексте значения, игнорируются. Имена констант в различных группах могут быть одинаковыми.
    Не допускаются несколько одинаковых групп.

    Текст комментариев начинается со знака <<;>> и продолжаются до конца строки.

    Все константы могут быть прочитаны из шаблонов AP. Для этого применяется функция

    GetConfigVar( "#GLOBAL", [ <имя группы> <.> ] <имя константы>, значение );

    Пример конфигурационного файла:

     
     ;Выводить сообщения об ошибках на веб-страницу
    	debug="on"
     [mysql] ;Определить подключение к MYSQL
    	host = "localhost"
    	dblogin = "demo"
    	dbpass = "demo"
    	dbname = "demo"
     [files] ;указать, где лежат документы AP
    	root = "/mnt/projects/1/demo1/server/data"
     [modules] ;указать, какие библиотеки AP используются
    	sys = "/usr/local/apache/common-modules/sys.so"
    	socket = "/usr/local/apache/common-modules/socket.so"
     [handlers] ;указать, нужно ли обрабатывать 404-ю ошибку
    	404_handlerfiles = "/handlers/404.html"
     [protected];указать профиль закрытых разделов и соотв. ему обработчик
    	auth = "/admin-auth/index.html"
     [protected.auth] ; перечислить закрытые разделы
    	path = "/admin/"
    	path = "/news/admin/"
    	path = "/articles/admin/"
    

    Данные конфигурационного файла считываются AP, модулями AP, а также рядом утилит, написанных на PERL и C++.

    Собственные переменные, введенные разработчиком, могут быть считаны функцией GetConfigVar.


    « вернуться






  • Варианты поставки

    « вернуться




    Система поставляется в органиченном варианте и в полном коммерческом варианте. Каждый вариант имеет версии для различных
    операционных систем, в настоящее время имеются версии для Linux, Win32 и FreeBSD.

    Версия для Win32 предполагает доступ разработчика к консоли веб-сервера.

    Варианты поставки:

  • полнофункциональная версия хранит шаблоны и SQL-запросы в базе данных. Для изменения сайта или его разработки/ доработки
    используется специальный сервер, работающий по протоколу FTP3.
  • версия, не использующая СУБД MYSQL. Область применения версии без СУБД сводится к простым нединамическим сайтам.

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




    « вернуться




  • Преимущества и недостатки AP

    « вернуться




    В число преимуществ бесспорно включаются следующие возможности:

  • Объектно-ориентированный подход. Страница собирается из блоков, которые могут быть переопределены в зависимости
    от раздела сайта или иного состояния системы.
  • Простота работы с SQL. Простое конфигурирование и использование всех возможностей СУБД, запуск и обработка SQL-запросов.
  • Скорость работы. Система написана на языке С++, и несмотря на то, что она представляет собой интерпретатор, скорость
    сборки веб-страницы очень высокая.
  • Простой язык. Для освоения всех возможностей AP необходимо освоить лишь 5 конструкций. На основе этих 5 конструкций
    (вставка, условие, переменные, функции и цикл по SQL) можно разрабатывать очень сложные сайты. Также поставляются модули с готовой
    реализацией наиболее сложных блоков веб-сайта.

    В число недостатков можно отнести:

  • Сложное совмещение со готовыми скриптами на PERL, PHP
  • Отсутствие многих системных функций.




    « вернуться





  • Система разработки сайтов ART-PUBLISHING/C

    « вернуться



    Этот документ является руководством пользователя системы ART-PUBLISHING/C. В нем описываются основные конструкции,
    применяющиеся в ART-PUBLISHING для написания шаблонов, а также объясняется функциональная схема его работы. ArtPublishing
    является продуктом компании ARTSTYLE GROUP.


    « вернуться

    « вернуться



    Данный документ является техническим описанием системы ArtPublishing/C++ для разработчика.Он описывает
    основные возможности этой среды разработки и способы их применения.

    В Главе <<Основные концепции>> мы рассматриваем основные положения ARTPUBLISHING. Как работает ядро, как создается сайт и т.д.

    В Главе <<Язык шаблонов AP>> описываются основные конструкции языка.

    В Главе <<Функции>> описываются внешние функции, которые можно использовать в ARTPUBLISHING.

    В Главе <<Модули>> описываются модули, которые могут применяться для наращивания функционала как самого паблишинга, так и сайтов, на нем реализуемых.

    В последней Главе <<Примеры>> приводятся примеры программ на ARTPUBLISHING.

    Описание пользователя системы сложно подготовить в виде единого документа, так как
    сайты, созданные с использованием ArtPublishing имеют только общую среду разработки и
    общие модули. Таким образом данный документ есть описание среды разработки и описание модулей,
    использующихся для конструирования сайта.

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

    ARTSTYLE GROUP как создатель системы ARTPUBLISHING заявляет о себе как о
    профессиональным разработчиком сайтов на этом продукте, имеющем богатый опыт по его использованию
    в течение нескольких лет.




    « вернуться





  • Chapter 2 Язык шаблонов AP

    « вернуться






    Ниже приведено описание языка в форме Бэкуса-Наура, декларирующего синтаксис языка ArtPublishing.
     
    текст-шаблона 	= {/ <конструкция AP> | <текст HTML> /}
    конструкция AP 	= <конструкция-в-комментариях>
    	| <переменные-IO>
    	| <вставка_простая>
    	| <вставка-с-переходом>
    	| <параметр шаблона>
    параметр шаблона = "@" <число>
    переменные-IO 	= "&{" [пр] <переменная> [пр] [ "=" <пр> <значение> [пр] ] "};" |
    вставка_простая = "&{" [пр] (<имя функции> | <имя шаблона>) [ [пр] "(" [пр] <параметры> [пр] ")" ] [пр] "};"
    вставка-с-переходом = "&&{" [пр] (<имя функции> | <имя шаблона>) [ [пр] "(" [пр] <параметры> [пр] ")" ] [пр] "};"
    значение 	= [пр] (<строковая константа>
    	| <число>
    	| <имя функции> [ [пр] "(" [пр] <параметры> [пр] ")" ]
    	| <имя шаблона> [ [пр] "(" [пр] <параметры> [пр] ")" ]
    	| <переменная> ) [пр]
    переменная	= "#" <имя переменной> [ "[" [пр] <индекс> [пр] "]" ]
    индекс	= <число> | <слово>
    строковая константа = (`"` <текст-шаблона> `"` | `'` <текст-шаблона> `'`>)
    число 	= <цифра> { <цифра> }
    цифра 	= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
    имя функции 	= [ <имя модуля> "." ] <имя функции/шаблона>
    имя-sql-запроса	= [ <путь к шаблону> ] <имя шаблона> [ ".sql" ] [ [пр] "(" [пр] <параметры> [пр] ")" ]
    имя шаблона 	= [ <путь к шаблону> ] <имя функции/шаблона> [ ".html" | ".cf" | ".sql" ]
    путь к шаблону 	= ( <имя папки> { "/" | ".." <имя папки> } "/")
    параметры 	= <значение> { "," <значение> }
    имя папки 	= <имя функции/шаблона>
    имя функции/шаблона = <слово>
    слово	= <cимвол> { <символ> }
    символ 	= A-Za-z0-9_
    конструкция-в-комментариях= "<!--%"
    	( "%" )
    	|
    	( "%%" )
    	|
    	( "if " [пр] <условие> [пр])
    	|
    	( "else" [пр])
    	|
    	( "elseif [пр]" <условие> )
    	|
    	( "repheader" [пр])
    	|
    	( "repbody" [пр])
    	|
    	( "repblank" [пр])
    	|
    	( "repfooter" [пр])
    	|
    	( "next" [пр])
    	|
    	( "last" [пр])
    	|
    	( "repseparator" [пр])
    	|
    	( "local " [пр] <список переменных> [пр])
    	|
    	( "return " [пр] <переменная> [пр]
    	|
    	( "returnhtml " [пр] <текст_html> )
    	|
    	( "repeat " [пр] <параметры repeat> )
    	 "-->")
    параметры repeat = "source=" (`"` | `'`) <имя-sql-запроса> (`"` | `'`) "count=" (`"` | `'`) <число> (`"` | `'`)
    условие 	= [пр] <базовое_условие> { [пр] <условный оператор> [пр] "(" [пр] <базовое условие> [пр] ")" }
    базовое условие = [пр] <значение> [ <условный оператор> [пр] <значение> [пр] ]
    условный оператор = "gt" | "lt" | "eq" | "ne" | "<" | ">" | "%" | "==" | ">=" | "<=" | "!="
    список переменных = [пр] <переменная> [ [пр] "," [пр] <переменная> ] [пр]
    



    « вернуться

    « вернуться







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


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

    Виртуальные папки
    . Виртуальные папки являются <<прозрачными>> папками: обладая возможностями обычных папок они могут быть исключены из общей
    цепочки иерархии в пути к шаблону. При при отсутствии затребованного пользователем или ядром AP шаблона в папке выполняется поиск во всех подчиненных
    виртуальных папках и только затем выполняется поиск в родительских.

    Наследование используется для упрощения разработки подразделов на основе существующих (обычные папки) или несуществующих (виртуальные папки) в иерархии сайта разделов.
    Пример использования наследования можно посмотреть в разделе <<Примеры>>, простейший сайт, основанный на наследовании изображен на рис.
    и описан в разделе .

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




    « вернуться




  • Основные концепции

    « вернуться




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

    Использование БД в AP очень просто, синтаксических конструкций минимум. Все это позволяет считать AP
    очень эффективным инструментом для разработки сайтов.

    Ко всему прочему интерпретатор языка однопроходный, это касается даже <<Препроцессора>>, потому
    скорость его работы очень высока.

    В языке шаблонов AP приняты следующие синтаксические конструкции:

  • Вставки: групповые и ссылочные
  • Условия
  • Циклы
  • Препроцессор
  • Функции
  • Комментарии

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


    « вернуться

  • « вернуться




    Условие включения блока в веб-страницу.

    Формат:
    <!--%if <условие> -->
    ...
    <!--%else-->
    ...
    <!--%/if-->

    Если логическое выражение в конструкции IF не ложно, то блок HTML-кода между %IF и %ELSE
    или %IF и %/IF будет включен в веб-страницу. В противном случае включается блок после команды %ELSE до команды %/IF.

    Возможно также использование конструкции <!--%ELSEIF <условие> -->,
    обозначающей проверку некоторого подусловия в случае, если предыдущее условие ложно.

    Описанная конструкция должна быть полностью описана в пределах одного шаблона.




    « вернуться




  • Вставка

    « вернуться






    Вставка одного шаблона в другой позволяет разделить логические
    блоки веб-страницы по разным именованным шаблонам. Именованные
    шаблоны могут перекрываться, что позволяет реализовать некоторые
    принципы объектно-ориентированного программирования при верстке
    веб-страниц.

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

    Например, производится вставка в шаблон abc, расположенный, к примеру, в папке /support/,
    шаблона, например, index, из другой папки, к примеру, /about/.

    То есть /about/index вызывается из /support/abc. Что делать с теми шаблонами, которые включаются в
    вызываемый файл?

  • Вариант первый: искать их в той же папке, где вызываемый файл. То есть в /about/. В этом случае
    вставка называется групповой.
  • Вариант второй: искать их в папке, где находится вызывающий файл. То есть в /support/. В этом случае
    вставка называется ссылочной.
  • Формат ссылочной вставки:
    <&> <{> <имя шаблона> ( <параметры>, ... ) <}> <;>
    .

    Формат групповой вставки:
    <&> <&> <{> <имя шаблона> ( <параметры>, ... ) <}> <;>
    .
    Групповая вставка используется, если необходимо поставить в данное место страницы готовый блок из
    другой папки, даже если тот блок обслуживают несколько файлов в той же папке.

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

    Параметры шаблонов могут быть:

  • функцией, тогда указывается лишь
    ее имя: &{/folder/template(otherfunction(), other2())};
  • шаблоном, тогда указывается лишь его имя:
    &{/folder/template(template2(), /root/template())};
  • числом, тогда указывается только число:
    &{/folder/template(2, 4)};
  • строкой, тогда указывается строка в одинарных или двойных кавычках:
    &{/folder/template(ßtring", 'str')};
  • переменной, тогда указывается знак # и имя переменной
    &{/folder/template(#a,#b)};

    Также при выполнении вставки возможно использование модификаторов. Модификатор
    изменяет содержимое шаблона. Модификатор - это символ, помещаемый между фигурными скобками и знаком "&"
    в синтаксисе операции вставки. Существуют следующие типы модификаторов:


    [j - javascript] Модификатор для вставки содержимого шаблона как константы Javascript.
    Заменяются кавычки: двойная кавычка на \", одинарная кавычка на \",
    табуляция на \t, знаки перевода каретки на \ и \n,
    \ на \\;

    [e - url encoding] Модификатор для вставки в URL.
    Все пробелы заменяются на +, все символы, кроме латинских букв и цифр, заменяются на
    %<шестнадцатеричный код символа>.
    [b - carriage return encoding] Модификатор для замены всех переводов строк на <BR> для вывода
    в качестве части веб-страницы данных.
    [s - string length] Модификатор для вычисления длины аргумента в символах.
    [0 (ноль) - null out] Модификатор для подавления вывода. Для использования с шаблонами,
    не производящими вывода или производящими нежелательный вывод.
    [f - form encoding] Модификатор для помещения аргумента на веб-страницу
    в качестве параметра элементов формы.
    Заменяются символы: двойная кавычка на &quot;, одинарная кавычка на &quot;
    знак & на &amp;, знак < на &lt;, знак > на &gt;




    « вернуться




  • Комментарии

    « вернуться




    Комментарии в ArtPublishing бывают двух видов: транслируемые в
    выходной HTML и не транслируемые.

    Первые по своему синтаксису не отличаются от HTML-комментариев. Но текст, заключенный в
    комментарии такого типа остается на веб-странице. Такое бывает полезно, скорее всего,
    в одном случае: если оформляются Javascript-вставки на странице, и для совместимости с
    браузерами без Javascript сам код заключается в комментарии. Примеры:

     
    <script language=Javascript>
    <!--
     код Javasctipt
    //-->
    </script>
    Некомментареный текст <!-- комментарий --> некомментаренный текст
    

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

    Отличие комментариев второго типа от первого заключается в дополнительных двух знаках
    процента после открывающей конструкции:

    <!--%% далее текст комментария -->




    « вернуться




  • Выражения

    « вернуться




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

    Используются следующие арифметические и логические операторы в порядке убывания приоритетов:

    - - унарный минус,

    + - унарный плюс,


    * - умножение,

    / - деление,

    % - остаток от деления,


    + - сложение,

    - - вычитание,


    ! - логическое отрицание,


    eq - равенство строк,

    ne - неравенство строк,

    gt - сравнение строк: больше чем,

    lt - сравнение строк: меньше чем,

    > - сравнение чисел: больше чем,

    < - сравнение чисел: меньше чем,

    != - сравнение чисел: не равно,


    && - логическое И,

    || - логическое ИЛИ,




    « вернуться




  • Переменные

    « вернуться




    Переменные применяются для хранения записанных пользователем значений или для получения значений, записанных командами AP. Одной из таких команд
    является команда REPEAT - команда цикла по запросу SQL.

    Вывод переменной производится следующим образом:

    Формат
    <&> <{> <#> <имя переменной> <}> <;>

    При необходимости можно присвоить переменным значения:

    Формат
    <&> <{> <#> <имя переменной> = <выражение/значение><}> <;>

    Все переменные по умолчанию глобальные, то есть доступны после своего объявления на протяжении всех шаблонов.
    Можно объявить некоторые переменные локальными:

    Формат:
    <!--%local #переменная, ... -->




    « вернуться




  • Препроцессор

    « вернуться






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

    Начало блока и конец блока, передающегося на препроцессинг отмечаются символом <<`>> (редкоиспользуемая обратная кавычка, находится чаще всего на клавиатурах на одной кнопке с тильдой).

    Выражение в обратных кавычках воспринимается как шаблон и результат его обработки рассматривается как часть
    синтаксиса основного шаблона.

    Например, выражение &{`&{abc};`}; вызовет шаблон, имя которого находится в шаблоне abc.

    Выражение &{`&{};`}; вызовет шаблон, имя которого передано в параметре с номером <N>.

    Выражение &{func(`&{paramlist};`)}; вызовет шаблон или функцию func, передав ему параметры,
    список которых находится в шаблоне paramlist.




    « вернуться




  • Функции

    « вернуться




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

    Примеры:

    &{param('id')};

    &{GetConfigVar('config.cf', 'news.home')};




    « вернуться




  • Конфигурационные файлы

    « вернуться




    Конфигурационные файлы предназначены для хранения статической информации,
    которая либо не предполагает изменения, либо предполагает изменение
    техническим администратором сайта при его установке, настройке или перенастройке.

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

    Формат конфигурационных файлов
    Формат конфигурационного файла достаточно прост:

     
    [блок]
    ...
    переменная = значение
    ...
    [другой_блок]
    ...
    другая_переменная=значение
    ...
    

    переменные и блоки -- это наборы символов и чисел.

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

    Итак, рядовый конфигурационный файл может быть следующего вида:

     
     [block]
     a=3
     b=текст одна кавычка -> " далее текст
     c="текст в кавычках \"escaped quote\""
    

    Доступ к переменным осуществляется с помощью функции GetConfigVar.


    « вернуться




  • Циклы

    « вернуться




    Циклы по запросам SQL. Как показала практика, единственный вид циклов для построения веб-страниц, действительно нужный и часто используемый
    HTML-верстальщиками является цикл по запросу SQL. Повторение с фиксированным числом итераций или условным выражением в практике встречается редко
    и в случае необходимости может быть реализован через цикл по запросу SQL.

    Формат

    <!--%repeat source=«имя SQL-шаблона>"-->

    ...

    <!--%repheader-->

    ...

    <!--%repbody-->

    ...

    <!--%repblank-->

    ...

    <!--%repfooter-->

    ...

    <!--%repseparator-->

    ...

    <!--%/repeat-->

    Цикл инициирует запрос к базе данных, текст которого находится в шаблоне, указанном в параметре source.
    Каждая итерация цикла выполняет блок после %repbody до следующего тега. Тег %repheader описывает блок, который показывается перед
    %repbody для первой итерации, %repfooter - соответственно, для последней итерации. Если SQL-запрос не вернул ни одного значения,
    то выполняется блок %repblank. Все теги, кроме %repeat и %/repeat опциональны, по умолчанию пустые и могут быть пропущены.

    Html-код блока %repseparator используется для разделения элементов, находящихся в %repbody, %repheader и %repfooter.

    При каждой итерации заполняются переменные, имена которых строятся по названиям полей (столбцов), возвращаемых SQL-запросом. Например, <<&{#id};>>
    будет подставлять значение id из запроса select id from tablename.

    В цикле repeat можно указывать максимальное количество итераций с помощью параметра count:

    <!--%repeat source=«имя SQL-шаблона>" count="10"-->
    ...
    <!--%/repeat -->

    Количество итераций необходимо указывать обязательно в кавычках.
    В вышеприведенном примере количество итераций не превысит 10-ти, но может быть меньше,
    например, если SQL-запрос выдает меньшее число строк.

    Возможен вариант цикла без SQL-запроса.

    <!--%repeat count="10"-->

    ...

    <!--%/repeat -->

    Количество итераций такого цикла будет всегда равно десяти.

    Существует системная переменная с именем num, которая возвращает номер итерации цикла, начиная с 1.
    Она возвращает номер итерации в обоих разновидностях цикла. Для последнего рассмотренного случая:

    <!--%repeat count="10"-->

    &{#num};

    <!--%/repeat -->

    будет выведено 12345678910. группируя с вышеописанными repfooter и repheader,
    получаем:

    <!--%repeat count="10"-->

    <!--%repheader-->

    (

    <!--%repfooter-->

    )

    <!--%repseparator-->

    ,

    <!--%repbody-->

    &{#num};

    <!--%/repeat -->

    выведется строка (1,2,3,4,5,6,7,8,9,10)

    В обоих видах циклов возможно использование команд next и last, записываемых
    следующим образом:

    Перейти к следующией итерации цикла
    с помощью команды <!--%next-->

    Завершить цикл с помошью команды <!--%last-->

    Например,

    <!--%repeat count="7"-->

    <!--%if #num == 3-->

    <!--%next-->

    <!--%/if-->

    <!--%if #num == 5-->

    <!--%last-->

    <!--%/if-->

    &{#num};

    <!--%/repeat-->

    Этот фрагмент напечатает следующее:

    1 2 4

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




    « вернуться






  • Создание С++ модулей для ArtPublishing

    « вернуться



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

    Интерфейс имеет следующий вид:

    char *NameFunk (int number , char *ARGV[] , int RetVar[] );


    Здесь:

    • number - число параметров,
    • *ARGV[] - массив указатетелей на строки,
      содержащие аргументы для функции, число строк передается в параметре number.
    • RetVar[] - состоит из массива нулей, количество элементов в массиве
      передается в параметре number. Если мы хотим вернуть в аргументе i значение,
      то мы должны установить в массиве RetVar i - элемент в 1.

    Функция обязана вернуть указатель на результирующию строку, иначе
    возможно некорректное функционирование ядра


    « вернуться




  • Спецификация функций в С++ для использования в качестве модуля ArtPublishing

    « вернуться




    Для того чтобы из so-библиотеки можно было вызвать функцию из вне, она
    должна быть экспортирована как функция языка C. Для этого используется
    выражение 'extern "C"'.



    Пример описания функций:

    extern "C" int test(); - функция тест будет экспортирована.


    « вернуться




  • Пример функции

    « вернуться



    Рассмотрим пример на создании функции testFunction:
    функция имеет два аргумента,
    в первом параметре функция фозвращает слово "testirovanie",
    результатом функции является конкантенация строк.

     
    #include <stdio.h>
    #include <stdlib.h>
    extern "C" char *testFunction (int number , char *ARGV[] , int RetVar[])
    {
     char *cResalt = NULL;
     /* если больше двух параметров, то это не критично можем начать обработку */
     if ( number >= 2)
     {
     //выделяем память для возврата рузультата
     cResalt = new char [ strlen ( ARGV[0] ) + strlen ( ARGV[1] ) + 1 ];
     //записываем результат
     sprintf ( cResalt , "%s%s", ARGV[0] , ARGV[1] );
     //изменяем первый аргумент для этого
     //удаляем его
     delete ARGV[0];
     //выделяем память для записи нового значения
     ARGV[0] = new char [20];
     //записываем новое значение
     strcpy ( ARGV[0] , "testirovanie" );
     //устанавливаем флаг, что аргумент был изменен.
     RetVar[0] = 1;
     }
     /* если cResalt по каким - то причинам (мало аргументов) равен NULL, то присваиваем
     указатель на пустую строчку*/
     if ( cResalt == NULL )
     {
     cResalt = new char[2];
     cResalt[0] = 0;
     }
     //возвращаем результат
     return cResalt;
    }
    

    Сохраним нашу функцию в файле test.cpp.
    в командной строке наберем:




    g++ -c test.cpp

    ld -G test.o -o test.so



    Мы получили файл test.so.

    Подключим test.so к ArtPublihing, длЯ этого необходимо прописать
    в конфигурационном файле в разделе [modules] следующую строку:



    test = /path/test.so



    выполним:

     
    --------------
    Object not found: test.testFunction
    a=aaa
    -------------------
    Получаем результат:
    -----------------
    aaabbb
    a = testirovanie
    ------------------
    



    « вернуться





  • Chapter 3 Функции

    « вернуться










    « вернуться

    « вернуться




    Функции поставляются в виде объектных модулей и подключаются в главном конфигурационном файле .cf
    в блоке [modules].

     
    [modules]
    имя модуля=полный путь к папке, где лежат модули
    

    Важно: строки в этом блоки должны настраиваться исключительно
    администратором. Имя модуля в стандартных решениях менять исключительно
    не рекомендуется.




    « вернуться




  • Общие положения

    « вернуться





    Функции вызываются по тому же синтаксису, как и подстановки:

    Формат:
    <&> <{> <имя функции> ( <параметры>, ... ) <}> <;>
    .

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

  • другой функцией, тогда указывается лишь
    ее имя: &{function(otherfunction(), other2())};
  • шаблоном, тогда указывается лишь его имя:
    &{function(template(), /root/template())};
  • числом, тогда указывается только число:
    &{function(2, 4)};
  • строкой, тогда указывается строка в одинарных или двойных кавычках:
    &{function(ßtring", 'str')};
  • переменной, тогда указывается знак # и имя переменной
    &{function(#a,#b)};

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




    « вернуться




  • Встроенные функции

    « вернуться





    В качестве базовых функций в AP реализованы:
    @<N>
    получает значение параметра, переданного в шаблон при вызове. <N> определяет номер параметра, начиная с 1.
    escape(#variable)
    заменяет некоторые символы для последующей вставки в SQL для устранения возможного конфликта со спецсимволами SQL.

    Функции работы с конфигурационными файлами

    GetConfigVar(ConfigFile, VarName)
    чтение переменной из текста конфигурации.

    Примеры вызова:


    &{GetConfigVar("/config/files.cf", "FILES.PATH")};




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


    Формат конфигурационных файлов описан в разделе "Основные концепции"

    получаем значение переменной PATH из блока FILES.

    SetConfigVar(ConfigFile, VarName, Value)
    установка текста переменной из конфигурации.
    GetConfigValue(ConfigFile, Value )
    поиск первой удовлетворяющего указанному значению переменной всего файла ConfigFile.
    DeleteConfigVar(ConfigFile, Variable )
    удаление переменной из файла ConfigFile

    Функции для работы с шаблонами

    LoadTemplate(path)
    чтение содержимого шаблона, находящегося по адресу path относительно директории данных паблишинга
    SaveTemplate(path, content)
    Сохранение содержимого (content) шаблона, находящегося по адресу path относительно директории данных паблишинга
    DeleteTemplate(path)
    Удаление шаблона, находящегося по адресу path относительно директории данных паблишинга
    FileTemplate(path, content)
    ...
    FileListing(path, no, 0/1)
    выполняет сканирование каталога path (указывается относительно папки документов паблишинга) на директории (третий параметр -- 1) или файлы (третий параметр -- 0). Функция вызывается каждый раз с возврастающим значением второго параметра от 0 до первого пустого значения, возвращаемого функцией. Непустые значения соответствуют именам шаблонов.

    Функции для работы с БД

    setTwoConnect (host,user,password,base_name)
    для подключения ко второй базе данных. Функция возвращает 1 если все прошло успешно и ноль в противном
    случае. В случае, успешного выполнения этой функции все запросы будут идти ко второй
    базе данных. Что бы разорвать соединение со второй базой данной надо воспользоваться
    функцией closeTwoConnect():
    closeTwoConnect()
    Востанавливает работу с первой базой данных.

    Функции работы с переменными веб-сервера, сетевые функции

    SetContentType("mime/type")
    Устанавливает нужный тип вывода. На данный момент поддерживаются только текстовые типы -- text/html (по умолчанию), text/plain и др.
    GetEnv("HTTP_VAR")
    Чтение переменной окружения с именем, указанным в параметрах
    GetHostByAddr("ipaddress")
    по адресу, возвращает название хоста.
    GetHostByName("hostname")
    по названию, возвращает ip адрес хоста.
    SetLocation(path)
    передает управление на другой адрес, URL которого указан в PATH
    GetPath()
    получение текущего пути на сайте из URL без доменного имени. Напр. /about/company<</>>;
    Эта функция не включает в результат cgi-переменные и доменное имя. Для получения доменного имени следует пользоваться функцией GetPath(0);
    GetPath(N)
    получение элемента текущего пути, номер которого задан в параметре. Для пути /about/company/ вызов этой функции с параметром, равным 2, возвращает <<company>>. Для получения доменного имени зарезервирован 0-й параметр, т.е. GetPath(0)
    выдает значение домена с http://, напр. http://domain.ru/
    param(ParamName)
    получает значение параметра, переданного методами GET или POST из формы HTML.
    SaveToDataSpace(formvariable, path, [newfilename] )
    выполняет запись файла, пришедшего из формы как аттачмент (тип input type=filename) по адресу path под "родным" именем или под указанным третьим параметром.

    Функции работы с серверными cookies

    GetCookie(CookieName)
    получение значения Cookie по имени;
    SetCookie(CookieName, Value, ExpireDate, Path)
    установка значения Cookie по имени с указанием даты и времени окончания и пути, к которому приписывается Cookie.
    ViewCookie()
    показывает все Cookies, используется для отладки




    « вернуться

    « вернуться




    Для подключения модуля socket нужно в раздел modules файла .cf
    записать


    socket = "/usr/local/apache/common-modules/socket.so"
    getHttp(host, path, enconding)
    выполняет обращение к скрипту или веб-странице через HTTP-протокол. Результат возвращается
    функцией в виде вывода скрипта или содержимого веб-страницы. Третим параметром
    передается кодировка, в которой запрашивается результат. Для кодовой страницы CP1251 (windows)
    значение будет "windows-1251". Если не указывается имя хоста для функции getHttp, то берется
    текущий.



    « вернуться




  • Функции модуля SYS

    « вернуться




    Модуль SYS требует записи в главный
    конфигурационный файл .cf следующей строки

     
    [modules]
    sys=полный путь к папке, где лежат модуль sys
    

    На данный момент в библиотеке sys реализованы:


    SendMail() отправка e-mail. Формат - sendmail(from, to, subject, encoding, body).

    [from] - поле адреса отправителя

    [to] - поле адреса получателя
    [subject] - поле заголовка
    [encoding] - поле кодировки (windows-1251 или koi8-r)
    [body] - собственно тело сообщения.

    Также функция работает в другом режиме -- если используется только один параметр.
    Этим параметром должен являться шаблон, содержащий заголовки письма и сам текст.

    GetEnv(Var) получает значение переменной окружения.

    randomstring() выдает время в мс. Используется в сессиях.
    match(R,S,#a,#b,#c,...) функция, определяющее соответствие строки
    регулярному выражению. R=регулярное выражение, окруженное знаками <</>>,
    S = строка, которая сопоставляется рег. выражению, #a = переменная, в которую помещается
    совпадающий фрагмент строки регулярному выражению, #b, #c, и т.д. это переменные,
    в которые помещаются фрагменты входной строки S, соответствующие скобочным выражениям
    в регулярном выражении. Первая скобка соответвует второму параметру = #b,
    вторая скобка - третьему параметру и т.д. Функция match возвращает 1, если строке
    найдено сопоставление или 0, если не найдено.

    replaceReg(R , S, toS) функция ищет в строке S регулярное выражение R и заменяет
    найденные подстроки, удовлетворяющие выражению R, на строку toS. R = регулярное выражение, окруженное знаками <</>>.
    S = строка, которая преобразуется. toS = строка, на которую заменяются найденные подстроки в строке S.
    Функция возвращает преобразованную строку.

    replace(R, F, S) функция определяет соответствие строки регулярному выражению, затем она
    преобразовавает строку S в соответствии с форматом F. R = регулярное выражение, окруженное знаками <</>>.
    S = строка, которая сопоставляется рег. выражению. F = формат возвращаемой строки, в которой можно
    использовать выражения $0, $1 , $2 .. $99. $0 - соответствует входной строке S.
    $1 .. $99 соответствуют фрагментам строки S, которые разделяются скобочными выражениями в регулярном выражении R.
    Первая скобка соответвует $1, вторая скобка - $2 и т.д. Функция возвращает преобразованную строку.





    « вернуться




  • Функции модуля "mail"

    « вернуться




    Описание


    Модуль "mail" позволяет производить отправление электронных сообщений (e-mаil),
    состоящих их нескольких частей, например, писем с приложенными документами.



    Замечания:
  • Отличие функций этого модуля от функции SendMail состоит в
    неспособности последней отправлять приложенные документы.
    Для отправки сообщений, состоящих только их текста, предпочтительнее
    использовать функцию SendMail (определенную в модуле sys)
  • Функция ExtSendMail этого модуля не поддерживает создание сообщений
    с альтернативным содержанием (т.е. тип потока multipart/alternative не поддерживается).

    Подключение


    Для подключения модуля необходимо прописать в разделе [modules] файла .cf строку:
     
    mail = "<path>/mail.so"
    






    Поддерживаемые функции:


    ExtSendMail(<сообщение>)
    отправляет указанное сообщение при помощи программы sendmail.

    сообщение должно содержать все адресные заголовки, необходимые для отправки письма.
    Как правило, это заголовки From:, To:, Return-Path и Subject:.




    Приложения


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

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



    Для указания названия приложенного файла используется следующий синтаксис:

    /path/file(attachment_name)

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



    Тип содержания ("Content-Type") для текста


    Если в заголовках письма указано поле "Content-Type", то текст письма будет
    помечен этим заголовком, иначе используется тип по умолчанию "text/plain; charset=windows-1251".



    Пример использования:

     
    &{ExtSendMail(
    "From: <bob@artstyle.ru>
    To: <alice@artstyle.ru>
    Return-Path: <admin@artstyle.ru>
    Subject: Hi there!
    Attachment: "/home/bob/confidential/plans 2.doc"("Планы, версия 2") /home/bob/confidential/rules.doc("Описания")
    
    Hi, See attached documents. "};


    Замечания:

    Возможные ошибки


    Если функция ExtSendMail вызвана менее чем с одним аргументом,
    возвращается ошибка "not enough arguments" и отправления писем не происходит.


    « вернуться




  • Функции модуля "im"

    « вернуться




    Описание


    Модуль "im" предназначен для работы с растровыми изображениями.
    Модуль поддерживает основные форматы, такие как Compuserve GIF, JPEG, PNG и другие.



    Подключение


    Для подключения модуля необходимо прописать в разделе [modules] файла .cf строку:
     
    im = "<path>/im.so"
    






    Поддерживаемые функции:


    resize(<исходный_файл>,<новый_файл>,<#ширина>,<#высота>)
    изменяет размер изображения.

    Функция изменяет размер изображения в файле исходный_файл и записывает результат
    в новый_файл в том же формате, что и оригинальный файл.
    Файлы (и оригинальный, и новый) должны находиться в веб-пространстве сервера. В функцию передаются
    пути относительно корневого каталога веб-сервера (т.е. пути должны совпадать с URL этих файлов).
    Ширина и высота могут быть указаны следующим образом:
  • Оба числа - положительные. Производится пропорциональное изменение размеров таким образом,
    чтобы получившаяся картинка была размером не более чем Ширина х Высота.
    Реальный размер картинки может отличаться.
  • Оба числа - отрицательные. Производится непропорциональное изменение. Новая картинка
    будет иметь размер абсолютная величина ширины х абсолютная величина высоты.
  • Оба числа - нули. Картинка будет иметь размер как оригинальнвя. Этим можно воспользоваться для конвертации форматов.
  • Одно из чисел - нуль, другое - положительное. Нулевой параметр пересчитывается таким образом,
    чтобы преобразование было пропорциональным.
  • Одно из чисел - нуль, другое - отрицательное. Не поддерживается.



    Пример использования:
  •  
    &{resize('/img/original.jpg','/img/original-thumbnail.jpg','120','60')};
    	

    getimagesize(<файл>,<ширина>,<высота>)
    возвращает размер изображения.

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

    Функция всегда возвращает численный код ошибки:

    • 0 - успешное выполнение: файл прочитан и в переменных сохранен размер
    • > 0 - произошла ошибка. Значение переменных не изменено.

      Коды ошибок:

      • 1 - неверное количество параметров
      • 2 - недостаточно памяти
      • 3 - файл не существует, либо формат файла не известен





    Пример использования:
     
    &{#err_code=getimagesize('/img/img.jpg',#width,#height)};
    <!--%if #err_code > 0 -->
    	Формат файла не известен
    <!--%else -->
    	Размер изображения: &{#width};x&{#height};
    <!--%/if-->
    	


    Замечания:
    <!--

  • Функция resize по-возможности производит пропорциональное изменение размера.
    Если указанные размеры не соответствуют пропорциональному изменению размера, то функция
    создает максимально возможное пропорциональное изображение, размерами не превышающее
    ширинахвысота и затем добавляет "обрамление" до требуемого размера.
    -->
  • Создание модуля im.so может быть отменено на этапе компиляции системы. В этом
    случае функция resize будет недоступна.

    Возможные ошибки


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

    Известные ограничения и ошибки реализации


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

    Автора!


    Оригинальная версия модуля была написана Сергеем Шкляровым и является
    стандартным модулем системы начиная с версии 1.2.


    « вернуться




  • Функции модуля "pcre"

    « вернуться




    Модуль "pcre" позволяет работать с регулярными выражениями языка Perl.
    Для подключения модуля необходимо прописать в разделе [modules] файла .cf строку:


    pcre = "<path>/pcre.so"




    Поддерживаемые функции:


    pmatch(<regexp>,<строка> [,переменные_для_подстрок])
    ищет данное регулярное выражение в строке и возвращает "1", если выражение найдено, и "0" - если нет.

    Регулярное выражение должно иметь вид: /выражение/флаги. Если выражение содержит
    построки (выражения в скобках), то при удачном совпадении значения этих подстрок
    будут скопированы в переменные.


    Флаги: поддерживаются флаги i,s,x,m,g. Их действие полностью аналогично
    работе интерпретатора Perl.
    preplace(<regexp>,<строка>,<строка_замены>)
    ищет данное регулярное выражение в строке и заменяет его на другую строку.

    В строке замены допустимо использовать подстроки из регулярного выражения.
    Синтаксис: $<номер_подстроки>

    Замечания:

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

    Возможные ошибки


    Если в процессе работы не хватает памяти, возвращается строка "Not enough memory".

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


    « вернуться




  • Функции модуля "charset"

    « вернуться




    Модуль "charsets" позволяет конвертировать строки из одного набора символов
    в другой.
    Для подключения модуля необходимо прописать в разделе [modules] файла .cf строку:


    charsets = "/path/charsets.so"




    Поддерживаемые функции:


    convertCharset
    конвертирует строку из одного набора символов в другой.


    Существует две формы вызова функции convertCharset:

  • convertCharset(<строка>)

    конвертирует строку из формата по-умолчанию (WINDOWS-1251) в KOI8-R.
  • convertCharset(<исходная_кодировка>,<желаемая_кодировка>,<строка>)

    в этом режиме функция производит конвертацию произвольных кодировок (список возможных значений кодировок см. ниже).
  • Замечания:

  • Кодировки по-умолчанию для первого формата вызова могут быть указаны в процессе
    компиляции модуля и поэтому могут отличаться от указанных.

    Возможные ошибки


    При использовании расширенной версии функции может возникуть ошибка "Invalid argument".
    Это означает, что были указаны неизвестные имена кодировок или конвертация в указанном
    направлении невозможна.

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

    При этом возможны ошибки при конвертации многобайтовых кодировок, если входная строка .

    Если в процессе конвертирования не хватает памяти, процесс прерывается и
    возвращается строка "Not enough memory".

    Приложение А: возможные названия кодировок


    437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,

    866, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4, 8859_5,

    8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4,

    ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110,

    ARABIC, ARABIC7, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5, BIG-FIVE, BIG5,

    BIG5HKSCS, BIGFIVE, BS_4730, CA, CN-BIG5, CN-GB, CN, CP-AR, CP-GR, CP-HU,

    CP037, CP038, CP273, CP274, CP275, CP278, CP280, CP281, CP284, CP285, CP290,

    CP297, CP367, CP420, CP423, CP424, CP437, CP500, CP737, CP775, CP819, CP850,

    CP851, CP852, CP855, CP856, CP857, CP860, CP861, CP862, CP863, CP864, CP865,

    CP866, CP868, CP869, CP870, CP871, CP874, CP875, CP880, CP891, CP903, CP904,

    CP905, CP918, CP930, CP932, CP933, CP935, CP936, CP937, CP939, CP949, CP950,

    CP1004, CP1026, CP1046, CP1047, CP1250, CP1251, CP1252, CP1253, CP1254,

    CP1255, CP1256, CP1257, CP1258, CP1361, CPIBM861, CSA7-1, CSA7-2, CSASCII,

    CSA_T500-1983, CSA_T500, CSA_Z243.4-1985-1, CSA_Z243.4-1985-2, CSDECMCS,

    CSEBCDICATDE, CSEBCDICATDEA, CSEBCDICCAFR, CSEBCDICDKNO, CSEBCDICDKNOA,

    CSEBCDICES, CSEBCDICESA, CSEBCDICESS, CSEBCDICFISE, CSEBCDICFISEA,

    CSEBCDICFR, CSEBCDICIT, CSEBCDICPT, CSEBCDICUK, CSEBCDICUS, CSEUCKR,

    CSEUCPKDFMTJAPANESE, CSGB2312, CSHPROMAN8, CSIBM037, CSIBM038, CSIBM273,

    CSIBM274, CSIBM275, CSIBM277, CSIBM278, CSIBM280, CSIBM281, CSIBM284,

    CSIBM285, CSIBM290, CSIBM297, CSIBM420, CSIBM423, CSIBM424, CSIBM500,

    CSIBM851, CSIBM855, CSIBM856, CSIBM857, CSIBM860, CSIBM863, CSIBM864,

    CSIBM865, CSIBM866, CSIBM868, CSIBM869, CSIBM870, CSIBM871, CSIBM880,

    CSIBM891, CSIBM903, CSIBM904, CSIBM905, CSIBM918, CSIBM930, CSIBM933,

    CSIBM935, CSIBM937, CSIBM939, CSIBM1026, CSISO4UNITEDKINGDOM, CSISO10SWEDISH,

    CSISO11SWEDISHFORNAMES, CSISO14JISC6220RO, CSISO15ITALIAN, CSISO16PORTUGESE,

    CSISO17SPANISH, CSISO18GREEK7OLD, CSISO19LATINGREEK, CSISO21GERMAN,

    CSISO25FRENCH, CSISO27LATINGREEK1, CSISO49INIS, CSISO50INIS8,

    CSISO51INISCYRILLIC, CSISO58GB1988, CSISO60DANISHNORWEGIAN,

    CSISO60NORWEGIAN1, CSISO61NORWEGIAN2, CSISO69FRENCH, CSISO84PORTUGUESE2,

    CSISO85SPANISH2, CSISO86HUNGARIAN, CSISO88GREEK7, CSISO89ASMO449, CSISO90,

    CSISO92JISC62991984B, CSISO99NAPLPS, CSISO103T618BIT, CSISO111ECMACYRILLIC,

    CSISO121CANADIAN1, CSISO122CANADIAN2, CSISO139CSN369103, CSISO141JUSIB1002,

    CSISO143IECP271, CSISO150, CSISO150GREEKCCITT, CSISO151CUBA,

    CSISO153GOST1976874, CSISO646DANISH, CSISO2022CN, CSISO2022JP, CSISO2022JP2,

    CSISO2022KR, CSISO2033, CSISO5427CYRILLIC, CSISO5427CYRILLIC1981,

    CSISO5428GREEK, CSISO10367BOX, CSISOLATIN1, CSISOLATIN2, CSISOLATIN3,

    CSISOLATIN4, CSISOLATIN5, CSISOLATIN6, CSISOLATINARABIC, CSISOLATINCYRILLIC,

    CSISOLATINGREEK, CSISOLATINHEBREW, CSKOI8R, CSKSC5636, CSMACINTOSH,

    CSNATSDANO, CSNATSSEFI, CSN_369103, CSPC8CODEPAGE437, CSPC775BALTIC,

    CSPC850MULTILINGUAL, CSPC862LATINHEBREW, CSPCP852, CSSHIFTJIS, CSUCS4,

    CSUNICODE, CUBA, CWI-2, CWI, CYRILLIC, DE, DEC-MCS, DEC, DIN_66003, DK,

    DS2089, DS_2089, E13B, EBCDIC-AT-DE-A, EBCDIC-AT-DE, EBCDIC-BE, EBCDIC-BR,

    EBCDIC-CA-FR, EBCDIC-CP-AR1, EBCDIC-CP-AR2, EBCDIC-CP-BE, EBCDIC-CP-CA,

    EBCDIC-CP-CH, EBCDIC-CP-DK, EBCDIC-CP-ES, EBCDIC-CP-FI, EBCDIC-CP-FR,

    EBCDIC-CP-GB, EBCDIC-CP-GR, EBCDIC-CP-HE, EBCDIC-CP-IS, EBCDIC-CP-IT,

    EBCDIC-CP-NL, EBCDIC-CP-NO, EBCDIC-CP-ROECE, EBCDIC-CP-SE, EBCDIC-CP-TR,

    EBCDIC-CP-US, EBCDIC-CP-WT, EBCDIC-CP-YU, EBCDIC-CYRILLIC, EBCDIC-DK-NO-A,

    EBCDIC-DK-NO, EBCDIC-ES-A, EBCDIC-ES-S, EBCDIC-ES, EBCDIC-FI-SE-A,

    EBCDIC-FI-SE, EBCDIC-FR, EBCDIC-GREEK, EBCDIC-INT, EBCDIC-INT1,

    EBCDIC-IS-FRISS, EBCDIC-IT, EBCDIC-JP-E, EBCDIC-JP-KANA, EBCDIC-PT,

    EBCDIC-UK, EBCDIC-US, ECMA-114, ECMA-118, ECMA-CYRILLIC, ELOT_928, ES, ES2,

    EUC-CN, EUC-JP, EUC-KR, EUC-TW, EUCCN, EUCJP, EUCKR, EUCTW, FI, FR, GB,

    GB2312, GB13000, GB18030, GBK, GB_1988-80, GOST_19768-74, GOST_19768,

    GREEK-CCITT, GREEK, GREEK7-OLD, GREEK7, GREEK8, HEBREW, HP-ROMAN8, HU,

    IBM-856, IBM-930, IBM-933, IBM-935, IBM-937, IBM-939, IBM-1046, IBM037,

    IBM038, IBM256, IBM273, IBM274, IBM275, IBM277, IBM278, IBM280, IBM281,

    IBM284, IBM285, IBM290, IBM297, IBM367, IBM420, IBM423, IBM424, IBM437,

    IBM500, IBM775, IBM819, IBM850, IBM851, IBM852, IBM855, IBM856, IBM857,

    IBM860, IBM861, IBM862, IBM863, IBM864, IBM865, IBM866, IBM868, IBM869,

    IBM870, IBM871, IBM874, IBM875, IBM880, IBM891, IBM903, IBM904, IBM905,

    IBM918, IBM930, IBM933, IBM935, IBM937, IBM939, IBM1004, IBM1026, IBM1046,

    IBM1047, IEC_P27-1, INIS-8, INIS-CYRILLIC, INIS, ISIRI-3342, ISO-2022-CN-EXT,

    ISO-2022-CN, ISO-2022-JP-2, ISO-2022-JP, ISO-2022-KR, ISO-8859-1, ISO-8859-2,

    ISO-8859-3, ISO-8859-4, ISO-8859-5, ISO-8859-6, ISO-8859-7, ISO-8859-8,

    ISO-8859-9, ISO-8859-10, ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15,

    ISO-8859-16, ISO-10646, ISO-10646/UCS2, ISO-10646/UCS4, ISO-10646/UTF-8,

    ISO-10646/UTF8, ISO-IR-4, ISO-IR-6, ISO-IR-8-1, ISO-IR-9-1, ISO-IR-10,

    ISO-IR-11, ISO-IR-14, ISO-IR-15, ISO-IR-16, ISO-IR-17, ISO-IR-18, ISO-IR-19,

    ISO-IR-21, ISO-IR-25, ISO-IR-27, ISO-IR-37, ISO-IR-49, ISO-IR-50, ISO-IR-51,

    ISO-IR-54, ISO-IR-55, ISO-IR-57, ISO-IR-60, ISO-IR-61, ISO-IR-69, ISO-IR-84,

    ISO-IR-85, ISO-IR-86, ISO-IR-88, ISO-IR-89, ISO-IR-90, ISO-IR-92, ISO-IR-98,

    ISO-IR-99, ISO-IR-100, ISO-IR-101, ISO-IR-103, ISO-IR-109, ISO-IR-110,

    ISO-IR-111, ISO-IR-121, ISO-IR-122, ISO-IR-126, ISO-IR-127, ISO-IR-138,

    ISO-IR-139, ISO-IR-141, ISO-IR-143, ISO-IR-144, ISO-IR-148, ISO-IR-150,

    ISO-IR-151, ISO-IR-153, ISO-IR-155, ISO-IR-156, ISO-IR-157, ISO-IR-166,

    ISO-IR-179, ISO-IR-193, ISO-IR-197, ISO-IR-199, ISO-IR-203, ISO-IR-226,

    ISO646-CA, ISO646-CA2, ISO646-CN, ISO646-CU, ISO646-DE, ISO646-DK, ISO646-ES,

    ISO646-ES2, ISO646-FI, ISO646-FR, ISO646-FR1, ISO646-GB, ISO646-HU,

    ISO646-IT, ISO646-JP-OCR-B, ISO646-JP, ISO646-KR, ISO646-NO, ISO646-NO2,

    ISO646-PT, ISO646-PT2, ISO646-SE, ISO646-SE2, ISO646-US, ISO646-YU, ISO6937,

    ISO_646.IRV:1991, ISO_2033-1983, ISO_2033, ISO_5427-EXT, ISO_5427,

    ISO_5427:1981, ISO_5428, ISO_5428:1980, ISO_6937-2, ISO_6937-2:1983,

    ISO_6937, ISO_6937:1992, ISO_8859-1, ISO_8859-1:1987, ISO_8859-2,

    ISO_8859-2:1987, ISO_8859-3, ISO_8859-3:1988, ISO_8859-4, ISO_8859-4:1988,

    ISO_8859-5, ISO_8859-5:1988, ISO_8859-6, ISO_8859-6:1987, ISO_8859-7,

    ISO_8859-7:1987, ISO_8859-8, ISO_8859-8:1988, ISO_8859-9, ISO_8859-9:1989,

    ISO_8859-10, ISO_8859-10:1992, ISO_8859-14:1998, ISO_8859-15:1998, ISO_9036,

    ISO_10367-BOX, IT, JIS_C6220-1969-RO, JIS_C6229-1984-B, JOHAB, JP-OCR-B, JP,

    JS, JUS_I.B1.002, KOI-7, KOI-8, KOI8-R, KOI8-U, KSC5636, L1, L2, L3, L4, L5,

    L6, L7, L8, L10, LATIN-GREEK-1, LATIN-GREEK, LATIN1, LATIN2, LATIN3, LATIN4,

    LATIN5, LATIN6, LATIN7, LATIN8, LATIN10, MAC-IS, MAC-UK, MAC, MACINTOSH,

    MS-ANSI, MS-ARAB, MS-CYRL, MS-EE, MS-GREEK, MS-HEBR, MS-TURK, MSCP949,

    MSCP1361, MSZ_7795.3, MS_KANJI, NAPLPS, NATS-DANO, NATS-SEFI, NC_NC00-10,

    NC_NC00-10:81, NF_Z_62-010, NF_Z_62-010_(1973), NF_Z_62-010_1973, NO, NO2,

    NS_4551-1, NS_4551-2, OS2LATIN1, OSF00010001, OSF00010002, OSF00010003,

    OSF00010004, OSF00010005, OSF00010006, OSF00010007, OSF00010008, OSF00010009,

    OSF0001000A, OSF00010020, OSF00010100, OSF00010101, OSF00010102, OSF00010104,

    OSF00010105, OSF00010106, OSF00030010, OSF0004000A, OSF0005000A, OSF05010001,

    OSF100201A4, OSF100201A8, OSF100201B5, OSF100201F4, OSF100203B5, OSF1002011C,

    OSF1002011D, OSF1002035D, OSF1002035E, OSF1002035F, OSF1002036B, OSF1002037B,

    OSF10010001, OSF10020025, OSF10020111, OSF10020115, OSF10020116, OSF10020118,

    OSF10020122, OSF10020129, OSF10020352, OSF10020354, OSF10020357, OSF10020359,

    OSF10020360, OSF10020364, OSF10020365, OSF10020366, OSF10020367, OSF10020370,

    OSF10020387, OSF10020388, OSF10020396, OSF10020402, OSF10020417, PT, PT2, R8,

    ROMAN8, SE, SE2, SEN_850200_B, SEN_850200_C, SHIFT-JIS, SHIFT_JIS, SJIS,

    SS636127, ST_SEV_358-88, T.61-8BIT, T.61, TIS-620, TIS620-0, TIS620.2529-1,

    TIS620.2533-0, TIS620, UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4BE, UCS-4LE,

    UCS2, UCS4, UHC, UJIS, UK, UNICODE, UNICODEBIG, UNICODELITTLE, US-ASCII, US,

    UTF-7, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF8, VISCII, WCHAR_T, WIN-SAMI-2,

    WINBALTRIM, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252, WINDOWS-1253,

    WINDOWS-1254, WINDOWS-1255, WINDOWS-1256, WINDOWS-1257, WINDOWS-1258, WS2,

    YU



    Замечания:
  • Список поддерживаемых кодировок на конкретной системе может отличаться от приведенного.
  • Список может меняться со временем даже на одной т той же системе (администратор может устанавливать дополнительные кодировки).
  • Одна и та же кодировка может быть названа несколькими способами (псевдонимами), например, CP1251 и WINDOWS-1251.


    « вернуться