Статьи

eZ publish: приложение PHP Killer — части 1-3

Если вы когда-нибудь просматривали списки PHP в Hotscripts в поисках системы управления контентом, чтобы избавить вас от написания собственных, вы, вероятно, столкнулись с eZ publish , приложением CMS на основе PHP и подумали: «Ух ты!» Ликующий, вы пытались установить его … безрезультатно. Вы отчаянно пытались прочитать код, но обнаруживать, что он не имеет никакого смысла. Наконец, вы ушли в тихий угол, чтобы зализать свои раны, вместо этого прибегнув к PHP Nuke .

Эта серия статей посвящена публикации в eZ и почему она заслуживает названия «Приложение убийцы PHP». Мы начнем с нуля: сначала мы установим eZ publish в вашей среде разработки. Затем мы узнаем, как использовать его функции и настроить его в соответствии с вашими потребностями. И, наконец, мы заглянем под капот, чтобы понять, что делает публикацию eZ галочкой: как публикация eZ на самом деле является мощным инструментом, который поможет вам создавать свои собственные веб-приложения.

В итоге вы сможете не только создавать и настраивать свой собственный веб-сайт eZ publish, но и создавать свои собственные приложения для работы в eZ publish.

Вот нижеследующее …

Часть 1 — введение в публикацию eZ, где мы исследуем, загружаем и устанавливаем необходимые файлы.

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

Часть 3 — мы обсуждаем, как вы можете создать свой собственный модуль публикации eZ, изучая, как и почему создавать собственные модули с публикацией eZ так просто.

Давайте начнем!

Часть 1

В меню этой первой статьи серии:

  1. Представляем eZ publish: разминка, прежде чем мы начнем на реальной работе
  2. Установка eZ publish: подготовьте публикацию eZ к работе и подготовьте ее к статье 2 серии
  3. Домашнее задание: жесткая дисциплина
Представляем eZ publish

eZ publish — это (на первый взгляд) система управления контентом веб-сайта, написанная на PHP норвежской компанией eZ systems . Публикация eZ была запущена в 2000 году. Она была запущена стремительно и успешно реализована на таких сайтах, как Webservices.org , Австрийское национальное бюро по туризму и Simplicity Networks (больше сайтов используют eZ для публикации здесь ), и получила поддержку со стороны IBM и Siemens, среди других деловых партнеров . Публикация eZ теперь даже включена в дистрибутив Debian Linux .

Системы управления контентом, как вы, вероятно, знаете из известного руководства Кевина Янка, позволяют публиковать динамический контент на вашем веб-сайте таким образом, чтобы его было легко поддерживать и обновлять. eZ publish доводит эту модель до совершенства. Во-первых, он позволяет хранить контент в базе данных (eZ publish 2.x в настоящее время поддерживает MySQL и PostgreSQL , а поддержка других баз данных, таких как Oracle, появится в версии 3.x). Помимо этой базы данных, набор приложений PHP предоставляет мощный интерфейс администрирования для обслуживания сайта, в то время как множество внешних модулей позволяют быстро внедрять публикацию eZ в виде чего-либо, от сайта новостей и сообщества, такого как SitePoint или интернет-магазина, до портал B2B или даже корпоративный Интранет. Другими словами, это решение всех потребностей вашего сайта!

Более того, eZ publish уже стоит на пороге арены Web-сервисов благодаря коммерчески лицензированной версии Desktop Edition, которая позволяет обновлять сайт публикации eZ с помощью клиента C ++ для Windows, взаимодействующего с интерфейсом сервера XML-RPC.

Хорошие новости для таких людей, как я, и вы — в eZ publish есть схема двойного лицензирования . Он предоставляет как лицензию с открытым исходным кодом GNU , так и (для желающих заниматься перепродажей или ребрендингом eZ publish) профессиональную лицензию. В основе проекта Open Source лежат системы eZ, которые являются отличным примером того, как превратить лицензионное программное обеспечение в коммерческий успех.

Что на предложение?

Итак, в стороне, что на самом деле может предложить публикация eZ? Самый простой способ получить ответы — это посетить демонстрационный сайт по адресу http://publishdemo.ez.no/ , а затем войти в систему администрирования серверной части, перейдя по адресу http://admin.publishdemo.ez.no/, используя:

имя пользователя: admin
пароль: опубликовать

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

Среди модулей вы найдете:

  • eZ article: это «основной» модуль, позволяющий публиковать статьи или «статические» страницы на вашем сайте.
  • eZ trade: мощное приложение для корзины покупок, которое вы найдете в действии на MyGold .com
  • eZ filemanager: отличный инструмент для интранета и распространения файлов, предоставляющий посетителям онлайн-файловую систему для просмотра
  • eZ forum: форумы для вашего сайта, аналогичные (хотя и не такие мощные, как) VBulletin , программное обеспечение для форумов SitePoint

… И многое другое, что подробно описано в руководствах пользователя . Другими словами, eZ publish дает вам все необходимое для создания собственной версии SitePoint Network! Как на демонстрационном, так и на основном сайте вы заметите, что даже URL-адреса похожи на URL-адреса SitePoint. Например:

http://developer.ez.no/article/articleview/367

и

http://www.webmasterbase.com/article/228

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

Еще одна CMS?

«Хорошо», я слышу, вы говорите, «другая система управления контентом. Большое дело».

Особенность публикации eZ — не впечатляющий список функций, а то, что происходит за кулисами. На самом деле, eZ publish — это среда разработки приложений, предоставляющая разработчикам PHP структуру, в которой можно создавать приложения и оттуда быстро развертывать их в реальной среде, экономя много часов на программировании.

Если вы когда-либо писали свой собственный веб-сайт PHP с нуля, вы, вероятно, захотели найти более простой способ сделать что-то. Вы столкнулись с множеством проблем: где разместить скрипты для вашего сайта, как построить интегрированную систему навигации по сайту, как предотвратить воспроизведение одинаковых блоков кода для каждой страницы вашего сайта ¡K и в целом множество других проблем (тем временем ваша социальная жизнь накапливается и направляется на Гавайи). Долгожданное завершение сайта может часто казаться чудом … тогда кто-то придумывает отличную идею для некоторых новых функций, и вы — снова пишу весь сайт, тихо плача про себя.

Среда разработки приложений устраняет бремя создания веб-сайтов. Соблюдая его правила и рекомендации, вы легко и быстро сможете поддерживать и расширять свой сайт. Хорошая структура должна составлять 90% решений по проектированию и разработке для вас. Решения таких проблем, как соглашения об именах, где разместить ваши скрипты в файловой системе вашего веб-сайта, как проектировать и структурировать ваш код, а также все другие мелкие детали, с которыми вы сталкиваетесь, просто следуют набору четких рекомендаций. А как насчет всего того кода, на который вы тратите часы, такого как соединение с базой данных и функции запросов, работы, которую вы воспроизводили снова и снова для каждого нового сайта? Все, что должно быть доступно в рамках, вы можете использовать по мере необходимости.

Вот что действительно предлагает eZ publish: возможность сделать свою жизнь разработчика беззаботной и приятной.

Предупреждение генерального кодера PHP:

Разработка с помощью eZ publish означает написание объектно-ориентированного кода!

Как бы мы все ни любили писать «взломанные» скрипты с использованием процедурного кода (возможно, с несколькими PHP-функциями, включенными только тогда, когда это действительно необходимо), правда в том, что если вы хотите, чтобы через год или два оставались волосы, вы нужна ориентация на объект. Написание объектно-ориентированного кода на PHP — это не просто экономия времени: это позволяет вам решать проблемы кодирования, которые просто не могут быть решены процедурным кодом. Если у вас есть два или три PHP-класса, работающие вместе в приложении, вы поймете, что никогда не захотите возвращаться. И тогда ты сможешь взломать, как никогда раньше!

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

В общем, способ публикации функций eZ при связывании различных модулей концептуально похож на подход Fusebox . Эта стратегия создания веб-приложений была задумана разработчиками, работающими с Coldfusion, и теперь появилась на PHP на Bombusbee.com . Основная концепция сайта, похожего на fusebox, заключается в том, чтобы иметь один сценарий (обычно index.php в корневом каталоге Интернета), который действует как «гаишник» для сайта, все страницы обслуживаются «через» index.php. Для получения дополнительной информации о подходе Fusebox, попробуйте Руководство для новичков Fusebox . С точки зрения разработки приложений, публикация eZ в общих чертах соответствует подходу Fusebox, поэтому она может помочь прочитать о Fuseboxes при подготовке третьей статьи в этой серии. Но не паникуйте! Мы оставим дальнейшее обсуждение ориентации объекта и дизайна приложения до третьей статьи в этой серии.

Вернуться к публикации в eZ! Чтобы разжечь аппетит у тех, кто знает, как разбираться в PHP-классах, взгляните на eZ publish Class Index . Затем перейдите к eZ publish sdk, которая в настоящее время разрабатывается для eZ publish v.3.

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

Установка eZ publish

При настройке рабочей версии публикации eZ я осмелюсь предположить, что вы используете Windows и готовы установить демо на своем компьютере. Используемый здесь процесс установки очень легко можно применить к среде виртуального хоста LAMP (Linux, Apache, MySQL, PHP), общей для многих веб-хостов.

Рекомендуется установить по крайней мере PHP версии 4.0.6 (даже лучше, если это PHP 4.1+) под Apache 1.3x, а также MySQL 3.23 или более поздней версии. Если у вас их нет, посмотрите не что иное, как phpdev Firepage, установочный комплект, который предоставляет Apache, PHP и MySQL в одном аккуратном пакете (плюс несколько других приятных вещей, таких как PHP-GTK и phpMyAdmin ). Текущая бета-версия phpdev5 очень стабильна, но чтобы избежать головной боли, рекомендуется использовать Apache 1.3.x вместо 2.x (phpdev5 beta 3 поставляется с обоими).

Версия публикации eZ, используемая в этой серии статей, — 2.2.6. Процесс установки может отличаться для разных версий, и имейте в виду, что публикация в eZ очень чувствительна к правильным настройкам php.ini. Если у вас есть какие-либо проблемы с инструкциями, используемыми в этой статье, оставьте свои вопросы в обсуждении форумов SitePoint в конце этой статьи. В противном случае вы найдете множество людей, желающих помочь по адресу http://developer.ez.no/developer/forums/ .

Вниз к делу

eZ publish 2.2.6 можно найти в файловом менеджере по адресу http://developer.ez.no/filemanager/list/85/ . Загрузите и разархивируйте куда-нибудь под вашим локальным веб-сервером Apache или PHP — с phpdev5 это, вероятно, будет что-то вроде « C:phpdev5wwwpublic ».

Примечание: существует установщик eZ publish для Windows — он также устанавливает Apache, PHP и MySQL. Тем не менее, мы сделаем все немного иначе, чтобы мы могли повторно использовать процесс установки на нашем действующем виртуальном сервере LAMP.

Разархивировав публикацию в eZ, теперь у вас будет каталог, похожий на C:phpdev5wwwpublicezpublish_2_2_6 (с этого C:phpdev5wwwpublicezpublish_2_2_6 я буду называть этот каталог «RoZ публикации в eZ»). Там вы найдете каталог installation , который содержит файл INSTALL.pdf Глава 3 этого документа — метод, который мы будем использовать для установки eZ publish.

Должны ли мы быть добродетельными?

Как вы видели в начале этой статьи, когда мы смотрели онлайн-демонстрацию публикации eZ, было два отдельных URL-адреса: один для основного сайта и другой для интерфейса администратора внутреннего интерфейса:

http://publishdemo.ez.no/ и
http://admin.publishdemo.ez.no/

Это достигается с помощью некоторых хитрых трюков с функциями виртуального хоста Apache, описанных в главе 2 INSTALL.pdf . Попытка установить публикацию eZ таким способом может быть чрезвычайно сложной — если не невозможной — на типичном веб-хосте, поэтому мы выбираем альтернативный вариант, когда не требуется настройка Apache. При этом установка по более простому пути немного изменит поведение eZ publish:

  • http://www.yourdomain.com/index.php ваша главная страница
  • http://www.yourdomain.com/index_admin.php — ваш интерфейс администратора

Кроме того, где eZ публикуют URL-адреса, обычно они выглядят так:

  • http://www.yourdomain.com/article/articleview/3/

используя более простой подход, URL будут выглядеть так:

  • http://www.yourdomain.com/index.php/article/articleview/3/

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

Магия изображения

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

Файл, который нам нужен для установки Image Magick, можно найти по адресу ftp://ftp.nluug.nl/pub/ImageMagick/binaries/ (или на одном из зеркал ). Файл, который вы ищете, будет называться ImageMagick-5.4.9-xp.exe или что-то подобное. Как только вы загрузите и запустите исполняемый файл, установите Image Magick в каталог C:Imagemagick .

Готов к действию

Вам нужно будет предпринять следующие шаги, чтобы настроить публикацию eZ.

  1. Скопируйте файл htaccess-nVH из установки [eZ publish_root]installation в [eZ publish_root] , переименуйте текущий файл с именем .htaccess в htaccess_old и переименуйте htaccess-nVH в .htaccess (обратите внимание, что в зависимости от вашей версии Windows Explorer может пожаловаться на начало файл с полной остановкой (или «точкой»). В этом случае вам потребуется переименовать файл с помощью командной строки DOS (см . шпаргалку командной строки Kev ).

    Измените корневой каталог публикации eZ и используйте rename htaccess-nVH .btaccess чтобы переименовать файл. Этот шаг гарантирует, что установка публикации eZ безопасна, и что посетители сайта могут получить доступ только к index.php.

  2. Теперь перейдите к базе данных MySQL (я предполагаю, что у вас есть phpMyAdmin — если у вас запущен phpdev5, он доступен по адресу http: // localhost / phpmyadmin ) и создайте базу данных с именем «publish».
  3. Теперь вам нужно импортировать базу данных MySQL для публикации в eZ. В phpMyAdmin (версия 2.3.0+) вам нужно щелкнуть вкладку SQL при просмотре базы данных публикации и использовать поле загрузки файла «Расположение текстового файла:», чтобы выбрать файл. Вам нужен файл [eZ publish_root]sqlpublish_mysql.sql , который создает структуру базы данных публикации eZ. Мы также хотим, чтобы некоторые примеры данных воспроизводились, поэтому загрузите файл [eZ publish_root]sqldata_mysql.sql , который будет заполнять базу данных.
  4. Переименуйте файл [eZ publish_root]site.ini в [eZ publish_root]site.ini.php и отредактируйте его в своем любимом редакторе. Причиной этого является, опять же, безопасность (файлы с расширением .php, кроме index.php, будут недоступны для посетителей).
  5. Теперь в site.ini.php вам нужно изменить следующие параметры в соответствии с вашей средой:

     [site]  SiteURL=localhost/public/ezpublish_2_2_6  AdminSiteURL=localhost/public/ezpublish_2_2_6  UserSiteURL=localhost/public/ezpublish_2_2_6  ...  SiteTitle=phpPoint  ...  SiteTmpDir=C:/Windows/temp  ...  # Database settings set DatabaseImplementation to  mysql|postgresql|informix.  DatabaseImplementation=mysql  Server=localhost  Database=publish  User=MySql_User  Password=MySql_User_Password  ...  ImageConversionProgram=C:Imagemagickconvert.exe 

    Сохраните файл.

  6. Отредактируйте файл sitedir.ini в eZ publish root и установите следующую переменную:
  7.  $siteDir = "C:/phpdev5/www/public/ezpublish_2_2_6/"; 
  8. Далее, вам нужно создать каталоги, которые eZ публикует, чтобы кэшировать страницы (что-то еще хорошее для публикации в eZ?). Загрузите файл в make_cache.zip . Он содержит командный файл make_cache.bat , который создаст для вас каталоги. Извлеките его в свой корневой каталог публикации eZ и с помощью командной строки DOS из корневого каталога публикации eZ типа make_cache . Теперь должны быть созданы все каталоги кеша, такие как [eZ publish_root]classescache . Убедитесь, что вы make_cache.bat когда закончите.
  9. Наконец, нам нужно убедиться в правильности настроек php.ini. Откройте файл php.ini (из каталога C: Windows) и проверьте следующие параметры:
    • short_open_tag = On

      eZ publish часто использует <? echo($variable); ?> <? echo($variable); ?> <? echo($variable); ?> синтаксис, а не <?php echo($variable); ?> <?php echo($variable); ?> Надеемся, что они исправят версию 3.x, чтобы помочь с переносимостью.

    • allow_call_time_pass_reference = On
    • Передача переменных по ссылке — это «плохая практика», обычно используемая в скриптах синтаксического анализа XML — еще один пункт, который, мы надеемся, у них будет время для исправления в eZ publish 3.x

    • error_reporting = E_ALL & ~E_NOTICE
    • register_globals = On
    • Разработка eZ publish 2.x началась до объявления о том, что глобальные регистры будут по умолчанию отключены из PHP 4.2. Как Кевин Янк предупредил нас в Напишите безопасные сценарии с PHP 4.2! , оставив регистр глобалов, напрашивается на неприятности. Опять же, мы надеемся, что это будет решено в eZ опубликовать версию 3.x

    • magic_quotes_gpc = Off
    • Магические цитаты — это зло! magic_quotes_runtime = Off также должен быть установлен.

    Это важные настройки. Сохраните ваш php.ini и перезапустите Apache.

Волшебный момент …

Зайдите на http: //localhost/public/ezpublish_2_2_6/index.php для просмотра вашего сайта! Чтобы войти в интерфейс администратора, перейдите по адресу http: //localhost/public/ezpublish_2_2_6/index_admin.php и войдите с помощью:

userid: admin
пароль: опубликовать

Не беспокойтесь об изображениях «не удалось создать вариации изображения» — это просто говорит нам, что ожидаемые изображения не были доступны (они не поставляются с установочным zip-файлом eZ). Если после просмотра домашней страницы публикации eZ вы обнаружили, что допустили ошибки в установке публикации eZ, и вам необходимо дополнительно изменить site.ini.php после внесения изменений, вам необходимо удалить все site.ini.php файлы. в [eZ publish_root]classescache (где eZ публикует кеширует ваш файл site.ini.php ). В противном случае, если у вас возникнут какие-либо проблемы, не стесняйтесь спрашивать в обсуждениях SitePoint Форумы в конце этой статьи.

Установка на Linux Хосты

Если я могу сделать еще одно предположение — вы размещаете свой PHP-сайт на общем сервере Linux — процесс установки будет очень похожим, но есть несколько подводных камней. Вот несколько советов, которые могут вам помочь.

  • Убедитесь, что у вас есть «ssh» доступ к вашему сайту. В Windows putty — отличный SSH-клиент. SSH — это безопасная (зашифрованная) версия telnet. В Google есть множество ресурсов, которые могут вам помочь, и ваш веб-хостинг также должен дать вам несколько полезных советов.
  • Передавая код публикации eZ на свой сайт, обязательно передайте его в виде полного заархивированного файла. Если вы загрузите его на свой компьютер, распакуете его, а затем перенесете отдельные файлы на свой сайт, у вас будут проблемы из-за прав доступа к файлам. Либо загрузите весь архив за один раз, либо, войдя в систему с помощью ssh, загрузите его из систем eZ с помощью командной строки wget :

    wget http://developer.ez.no/filemanager/ download/413/ezpublish_2_2_6.tar.gz

    Если у вас есть архив на вашем веб-сервере, вы можете разархивировать его с помощью команды:

    tar -zxvf ezpublish_2_2_6.tar.gz

    Это позволит извлечь лот в новый каталог «ezpublish_2_2_6» ниже каталога, в который вы ввели команду.

  • На шаге 7 установки Windows выше мы использовали пакетный файл DOS для создания каталогов кеша. Эквивалентом Linux является файл с именем modfix.sh , который вы можете запустить, изменив [eZ publish_root] на вашем сервере и набрав:
  • ./modfix.sh

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

  • Чтобы использовать Image Magick, convert двоичный файл должен быть установлен на веб-сервере. Пришло время попросить вашего веб-хостинга об одолжении (его не сложно установить), и попросите его рассказать вам, где они это сделали.

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

Домашнее задание

eZ publish теперь запущен! Прежде чем перейти ко второй части этой серии, ваша миссия, если вы решите принять ее, (при входе в систему с правами администратора):

Каталог изображений ez

  • Удалить существующие категории
  • Создайте новую категорию под названием «Логотипы», в которую «писать» и «загружать» могут только администраторы и авторы статей.
  • Под папкой Logos создайте категорию под названием «Software» с теми же разрешениями, что и «Logos».
  • Загрузите пару изображений в папку «Программное обеспечение», например, логотип PHP и логотип MySQL .

Ez Статья

  • Это становится немного сложнее: отредактируйте статью «Article Tags Demo» и посмотрите, сможете ли вы использовать ее для добавления двух логотипов, которые вы добавили.
  • Самое важное: узнайте о тегах статей eZ. Если вы Adminguide.pdf документацию к статье eZ и прочитаете Adminguide.pdf , вы найдете полную информацию — более краткое описание доступно на сайте http://doc.ez.no/article/articleview/3/1/7/ . Для следующей статьи важно, чтобы вы были довольны модулем статьи eZ — учащиеся класса А поймут, как статическая страница «Спасибо за ваш отзыв» связана с модулем формы eZ .

А если этого недостаточно, взгляните на файлы в [eZ publish_root]/checklists — они предназначены для того, чтобы помочь вам проверить, правильно ли работает публикация eZ, а также представляют собой полезную серию упражнений, чтобы привыкнуть ко всем функциям. , О, и не забудьте взглянуть на файл error.log когда закончите. Вы найдете в своем eZ publish root — это делает интересным чтение!

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

Часть 2

В первой части этой серии я познакомил вас с публикацией в eZ и осмелился переименовать его в «Приложение убийцы PHP». К концу предыдущей статьи вы установили eZ publish в свою систему разработки и, конечно, будучи очень прилежными, вы выполнили все домашние задания и знаете, что может предложить eZ publish.

Однако сейчас вы, вероятно, задаетесь вопросом, как изменить этот скучный серый фон и применить свой собственный дизайн. В этой статье я объясню именно это: как заставить публикацию в eZ выглядеть и вести себя так, как вы этого хотите. Я помогу вам создать вымышленный сайт под названием «phpPoint», который будет служить демонстрацией того, как вы можете настроить публикацию в eZ.

Сегодняшние события:

  • Дураки несутся: необходимые знания о структуре каталогов eZ, ini-файле сайта и системе кеширования.
  • Going Global: как изменить «глобальный» дизайн публикации eZ и как разделы используются для создания нескольких сайтов.
  • Нажав на модуль: здесь вы увидите, как работает настройка модуля. Сконцентрировавшись на eZ Article , вы увидите, как использовать его «API», как изменять его шаблоны и как использовать статические страницы, перевод URL и формы.
  • phpPoint Закончено: счастливый конец!

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

Дураки Раш В

Ok. Прежде чем начать взламывать, есть несколько вещей, которые стоит посмотреть, чтобы вы знали, где вы находитесь.

Структура каталогов публикации eZ

Если вы откроете свой установочный каталог публикации eZ C:phpdev5wwwpublicezpublish_2_2_6 (или там, где вы его установили) с помощью проводника Windows, вы увидите длинный список подкаталогов. Большинство из них относятся к модулям публикации eZ — их легко обнаружить, потому что все они выглядят как «ezsomething», например: «ezarticle», «eztrade» и «ezforum». Я вернусь к каталогам модулей позже, но сначала давайте посмотрим на некоторые другие важные каталоги и файлы:

  • Каталог администратора: содержит код и шаблоны для общего внешнего вида административной части публикации eZ. Модули добавляют дополнительный код для конкретных задач администратора, хранящийся в собственных каталогах (как вы вскоре увидите). Я оставлю этот каталог в покое, так как мне все равно, как выглядит интерфейс администратора: в конце концов, он приватный. Следует отметить, что любые «intl» -каталоги, с которыми вы можете столкнуться, содержат файлы, которые позволяют eZ publish обрабатывать языки, отличные от английского, — вы увидите больше об этом позже.
  • Каталог контрольных списков: Если вы действительно застряли в домашнем задании из последней статьи, вы уже знаете, что этот каталог содержит набор тестов, которые вы можете запускать в модулях публикации eZ. В eZ publish все еще есть незначительные ошибки, как можно ожидать от такого большого приложения. Если у вас возникнут какие-либо проблемы, и вы уверены, что это не ваша конфигурация, взгляните на eZ publish Bug Tracker .
  • Каталог классов: содержит общие классы PHP, которые используются при публикации eZ, как описано на http://developer.ez.no/doc/view/index . Если вы просто заинтересованы в применении собственного дизайна, вам не нужно беспокоиться об этом. Я рассмотрю их более подробно в третьей статье этой серии. Под каталогом классов вы также найдете очень важный каталог кэша. Мы расскажем больше о кешировании в ближайшее время, но вы должны знать, что этот каталог кэширует глобальные файлы конфигурации, такие как site.ini.php.
  • Каталог изображений: содержит изображения, используемые при публикации eZ. Дальнейшие изображения появляются под каталогами модуля.
  • Каталог сайта: этот каталог важен, так как содержит файлы, которые определяют общий дизайн публикации eZ. Мы рассмотрим это в ближайшее время.
  • Файл site.ini.php: хранит глобальные параметры конфигурации для публикации в eZ. Еще через минуту!
  • Файл sitedir.ini: используется eZ publish для определения местоположения при установке, как вы видели в первой части.
  • Файл cron.php: полезный файл, который помогает с запланированными обновлениями eZ публиковать, пока вы спите! Предназначен для инструмента Unix Cron (его также можно активировать с помощью инструмента планирования Windows, такого как планировщик задач).
  • Файл index.php: это «гаишник» публикации eZ, активирующий код по мере необходимости. Это никогда не должно меняться — любые попытки сделать это, вероятно, сломают вещи, если вы не знаете, что делаете.
  • Файл index_admin.php: это «гаишник» для административной системы. Опять же лучше не трогать!
  • Файл index_xmlrpc.php. Предоставляет интерфейс XML-RPC для публикации в eZ для использования с Desktop Edition . Не тот, кому вы должны мешать.

site.ini

В первой части этой серии вы переименовали ее в site.ini.php и внесли некоторые основные изменения, чтобы ваш сайт заработал. Теперь я буду ссылаться на него как просто на site.ini , чтобы соответствовать публикации публикации eZ.

Этот файл содержит глобальные параметры для всей публикации eZ, а также параметры, которые применяются к определенным модулям публикации eZ. Учитывая размер файла, я не собираюсь охватывать все настройки, а скорее выделю некоторые важные и объясню механизмы обновления site.ini . Вы должны найти большинство настроек само за себя.

Но прежде всего сделайте резервную копию и поместите ее в безопасное место.

В верхней части site.ini вы найдете настройки, которые применяются ко всему сайту. Давайте начнем с изменения этих.

 # Meta content variable  SiteAuthor=HarryF  SiteCopyright=HarryF &copy; 2002  SiteDescription=PHP: Getting the point?  SiteKeywords=PHP, Development, Tutorials, Articles 

Они определяют HTML-теги <meta> которые появляются в верхней части каждой страницы. Обратите внимание, что модули публикации eZ, такие как eZ article, могут переопределять SiteDescription и SiteKeywords значениями, которые вы создаете в своих статьях: это очень полезно, если вы хотите рассказать Google все о статье, которую вы написали. Настройки здесь соответствуют настройкам по умолчанию.

Давайте посмотрим еще немного:

 DefaultPage=/article/frontpage/1/  LogFile=error.log  EnabledModules=eZArticle;eZTrade;eZForum;eZLink;eZPoll;eZAd;  eZNewsfeed;eZBug;eZContact;eZTodo;eZCalendar;eZFileManager;  eZImageCatalogue;eZMediaCatalogue;eZAddress;eZForm;eZBulkMail;  eZMessage;eZQuiz;eZStats;eZURLTranslator;eZSiteManager;eZUser  CacheHeaders=true  ...  URLTranslationKeyword=section-standard;section-intranet;section-trade;  section-news  Sections=enabled  DefaultSection=1 

Хорошо, давайте пройдемся по этому коду шаг за шагом.

DefaultPage определяет, что будет отображаться на вашей домашней странице, т.е. http: //localhost/public/ezpublish_2_2_6/index.php, в данном случае, то же самое, что http: //localhost/public/ezpublish_2_2_6/index.php/article/frontpage / 1 /.

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

  EnabledModules себя.

  CacheHeaders контролирует заголовки кэширования браузера, предоставляемые по протоколу HTTP (он определяет, использует ли браузер собственную, локально сохраненную копию или выбирает новую с вашего сайта) - лучше оставить все как есть.

  URLTranslaterionKeyword вы увидите больше, когда URLTranslaterionKeyword к статье eZ - по сути, она помогает создавать «красивые» URL-адреса, поэтому вместо http: //localhost/public/ezpublish_2_2_6/index.php/forum/forumlist/1/ вы может иметь http: //localhost/public/ezpublish_2_2_6/index.php/forum/.

  Sections позволяют вам иметь несколько «стилей» для вашего сайта (немного похоже на скины), каждый из которых имеет свой внешний вид и предлагает доступ к различным модулям публикации eZ.  В связи с этим DefaultSection сообщает eZ об опубликовании, какой из них использовать на домашней странице, или если неясно, какой стиль использовать в любой момент.  Я посмотрю больше на разделы в ближайшее время.

После этого другие параметры, о которых вам нужно беспокоиться, относятся к модулям, например:

 [eZAdMain]  AdminTemplateDir=templates/standard/  TemplateDir=templates/standard/ImageDir=images/standard/  Language=en_GB  DefaultCategory=1  DefaultSection=1 

Вы увидите больше этого в ближайшее время. В каждом из каталогов модулей публикации eZ вы найдете файл site.ini.txt , в котором указано значение каждой из этих переменных.

Кэширование

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

  1. Каталог [ezPublish_root]/classes/cache/ используется для хранения PHP-скриптов и переменных. Содержимое site.ini будет найдено в разобранном виде вместе с переменными, которые eZ publish назначил для целого ряда операций. Если вы вносите изменения в site.ini вам нужно удалить файлы в этом каталоге, чтобы изменения вступили в силу.
  2. В site.ini вы найдете следующие настройки:
  3.  SiteCache=disabled  SiteCacheTimeout=60 

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

  4. Для некоторых модулей, таких как статья eZ, вы также найдете параметр « PageCaching » в site.ini , который также можно включить или отключить. Когда вы работаете над визуальным макетом такого модуля, как статья eZ, рекомендуется установить для этого параметра значение «отключено», чтобы вы могли видеть любые изменения по мере их внесения. Кроме того, если вы публикуете статью, а затем вносите в нее изменения, вам необходимо удалить ее кэшированную версию в [ezPublish_root]/ezarticle/cache/ .

В административной части публикации eZ вы найдете инструмент администрирования кэша в разделе «Менеджер сайта» (второй справа). Это хорошо работает, если у вас установлена ​​eZ publish под Linux, но, к сожалению, не с Windows (вам придется удалять кэшированные файлы вручную с помощью Explorer).

Going Global

Теперь у вас есть представление о том, как eZ публикации сочетаются друг с другом, пришло время приступить к тщательному применению вашего собственного дизайна (ну, на самом деле, моего - но притворитесь, что он ваш!).

Прежде чем вы начнете что-либо делать с eZ publish, вам нужен «эскиз» того, как вы хотите, чтобы ваш сайт выглядел. Подвергнув вас собственному личному предубеждению, первое, что нужно сделать, это загрузить копию Opera с http://www.opera.com/download/ . Почему? Потому что, вообще говоря, если ваш дизайн выглядит правильно в Opera, он будет выглядеть правильно в любом другом браузере. Если вы используете Windows, не-Java версия в порядке.

Я собрал простую HTML-страницу и таблицу стилей, которую я хочу «применить» для публикации в eZ. Если вы скачаете sampler.zip , вы найдете простой дизайн того, как сайт должен выглядеть в HTML, вместе с файлом CSS. Сайт будет очень простым - он будет использовать только модуль eZ article. Однако то, что вы узнаете здесь, должно быть применимо к более сложным сайтам публикации eZ. Стоит открыть файл sampler.html (из ZIP), пока вы читаете оставшуюся часть этой статьи, чтобы помочь визуализировать происходящее.

Каталог сайтов

Первый шаг - найти [ezpublish_root]/sitedesign/standard/ и скопировать его, который вам необходимо переименовать в [ezpublish_root]/sitedesign/phppoint/ . Все дизайнерские работы вы сохраните в каталоге phppoint . Это хорошая идея, чтобы оставить оригинальные каталоги нетронутыми, чтобы иметь примеры для работы.

Далее, от административного бэк-энда, направьтесь к менеджеру сайта (второй справа). Представлением по умолчанию является «Список разделов». Удалите разделы «Интранет», «Торговля» и «Новости», так как они вам не нужны, затем отредактируйте стандартный раздел, задав имя и дизайн сайта «phpPoint». Далее вниз по странице редактирования вы увидите раздел под названием «столбцы». Цель состоит в том, чтобы сразу четыре статьи появлялись на «главной странице», каждая из которых занимала всю ширину страницы. Поэтому добавьте строку, а затем установите их все в «1 статью столбца» с категорией «Все».

Теперь перейдите к URLTranslator (третий справа) и переименуйте /section-standard в /section-phppoint , затем удалите остальные три.

Наконец, в site.ini обновите следующие переменные:

 SiteDesign=phppoint  SiteStyle=ezpublish  SiteTitle=phpPoint  ...  EnabledModules=eZArticle;eZImageCatalogue;eZMediaCatalogue;  eZForm;eZStats;eZURLTranslator;eZSiteManager;eZUser  ...  URLTranslationKeyword=section-phppoint  Sections=disabled 

Переменные SiteDesign указывают на то, что eZ публикует каталог, в который я буду помещать свой дизайн. SiteTitle - это заголовок, который отображается в верхней части браузера. SiteStyle Я оставляю нетронутым, так как это относится к административному разделу SiteStyle . Вы должны убедиться, что доступны только те модули, которые вы хотите использовать с EnababledModules переменной EnababledModules . URLTranslation и Sections более подробно обсуждаются в разделе «Sections».

Наконец, очистите кеш в [ezpublish_root]/classes/cache/ .

Теперь вы готовы начать взлом!

frame.php

В вашем каталоге [ezpublish_root]/sitedesign/phppoint/ вы найдете файл с именем frame.php . Этот файл в основном является основным шаблоном в публикации eZ: более или менее все ваши страницы создаются публикацией eZ через этот шаблон.

Прежде чем идти дальше, если вы позволите мне кратковременную рутину: это то, о чем на самом деле говорят шаблоны в PHP. Как вы видели в этом обсуждении на форумах SitePoint , любая система шаблонов, которая не использует собственную языковую структуру и переменные PHP, является полной тратой времени, памяти и вычислительной мощности. frame.php является ярким примером того, как следует создавать шаблоны.

Теперь, глядя на содержимое frame.php , вы увидите, что HTML перемежается с PHP. Прежде чем редактировать его, я познакомлю вас с некоторыми примерами того, что вы там увидите. Сначала у вас есть:

 <title><?php  // set the site title   $SiteTitle = $ini->read_var( "site", "SiteTitle" );   if ( isset( $SiteTitleAppend ) )    print( $SiteTitle . " - " . $SiteTitleAppend );  else    print( $SiteTitle );   ?></title> 

Здесь код сначала назначает переменную $SiteTitle , извлекая ее из объекта $ini с помощью read_var() . Если вы совсем не уверены в используемом там синтаксисе, взгляните на вводное руководство Кевина Янка по объектно-ориентированному PHP .

После этого код проверяет переменную $SiteTitleAppend , которая, если она существует, обычно содержит что-то вроде заголовка статьи. Если эта переменная не найдена, содержимое <title /> будет просто переменной $SiteTitle вы установили в site.ini .

Двигаясь дальше вниз по сценарию, вы получаете:

 <img src="<? print $GlobalSiteIni->WWWDir; ?>/sitedesign/<?  print ($GlobalSiteDesign); ?>/images/ezpublish-yourcontentmadeeasy.gif"  height="20" width="290" border="0" alt="" /> 

Вот eZ publish строит URL, выбирая URL сайта с помощью:

 $GlobalSiteIni->WWWDir 

Хорошо, как работают эти классы публикации eZ, не так ли? Для тех, кто просматривал статьи Кевина Янка о платформе .NET , вы заметите удивительное сходство. Как я уже упоминал в первой части этой серии, eZ publish также является фреймворком, разработанным специально для создания приложений PHP. И это одна из вещей, о которых говорит хорошая структура: сделать вашу жизнь проще, предоставив хорошо разработанную библиотеку классов, которую вы сможете использовать повторно.

Во всяком случае, вернемся к делу. Некоторые переменные, используемые в frame.php, описаны по адресу http://doc.ez.no/article/articleview/204/1/54/ . Короче говоря, вот файл сэмплера, который вы видели ранее, примененный к frame.php. Обратите внимание, что я буквально не все скопировал и вставил. В частности, левое меню требует дополнительной работы, о которой я расскажу, когда рассмотрим модуль статьи eZ.

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"              "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="no" lang="no">   <head>  <title><?php  // set the site title   $SiteTitle = $ini->read_var( "site", "SiteTitle" );   if ( isset( $SiteTitleAppend ) )    print( $SiteTitle . " - " . $SiteTitleAppend );  else    print( $SiteTitle );   ?></title>    <?php   // check if we need a http-equiv refresh  if ( isset( $MetaRedirectLocation ) && isset( $MetaRedirectTimer ) )  {    print( "<META HTTP-EQUIV=Refresh ".         "CONTENT="$MetaRedirectTimer; URL=$MetaRedirectLocation" />" );  }   ?>   <link rel="stylesheet" type="text/css"    href="<?        print $GlobalSiteIni->WWWDir;        ?>/sitedesign/<?            print ($GlobalSiteDesign);                        ?>/style.css" />   <script language="JavaScript1.2">  <!--//    function MM_swapImgRestore()   {      var i,x,a=document.MM_sr;      for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;   }    function MM_preloadImages()   {      var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();      var i,j=d.MM_p.length,a=MM_preloadImages.arguments;      for(i=0; i<a.length; i++)          if (a[i].indexOf("#")!=0){              d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];          }      }   }    function MM_findObj(n, d)   {      var p,i,x;  if(!d) d=document;      if((p=n.indexOf("?"))>0&&parent.frames.length) {        d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);      }      if(!(x=d[n])&&d.all) x=d.all[n];      for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];      for(i=0;!x&&d.layers&&i<d.layers.length;i++)        x=MM_findObj(n,d.layers[i].document);      return x;   }    function MM_swapImage()   {      var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array;      for(i=0;i<(a.length-2);i+=3)      if ((x=MM_findObj(a[i]))!=null) {          document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];      }   }   //-->  </script>   <!-- set the content meta information -->   <meta name="author" content="<?php     $SiteAuthor = $ini->read_var( "site", "SiteAuthor" );    print( $SiteAuthor );   ?>" />  <meta name="copyright" content="<?php     $SiteCopyright = $ini->read_var( "site", "SiteCopyright" );    print( $SiteCopyright );   ?>" />  <meta name="description" content="<?php   if ( isset( $SiteDescriptionOverride ) )  {    print( $SiteDescriptionOverride );  }  else  {    $SiteDescription = $ini->read_var( "site", "SiteDescription" );    print( $SiteDescription );  }   ?>" />  <meta name="keywords" content="<?php  if ( isset( $SiteKeywordsOverride ) )  {    print( $SiteKeywordsOverride );  }  else  {    $SiteKeywords = $ini->read_var( "site", "SiteKeywords" );    print( $SiteKeywords );  }   ?>" />  <meta name="MSSmartTagsPreventParsing" content="TRUE" />   <meta name="generator" content="eZ publish" />   </head>   <body bgcolor="#FFFFFF" topmargin="6"    marginheight="6" leftmargin="6" marginwidth="6">   <table width="100%" border="0" cellspacing="0" cellpadding="0">  <tr>  <td class="sitetitle">phpPoint.com</td>  </tr>  </table>   <table width="100%" border="0" cellspacing="6" cellpadding="6">  <tr valign="top">  <td width="15%" class="menuback">   <!-- Left menu start -->   <?  $CategoryID = 0;  include( "ezarticle/user/menubox.php" );  ?>   <br />   <table class="menu">  <tr>  <td class="menuitem">  <a href="?PrintableVersion=enabled">Printable page</a>  </td>  </tr>  <tr>  <td class="menuitem">  <a target="_blank" href="http://developer.ez.no">  <img src="<?       print $GlobalSiteIni->WWWDir;     ?>/images/powered-by-ezpublish-100x35-trans-lgrey.gif"       width="100"       height="35" border="0" alt="Powered by eZ publish" /></a>  </div>  </td>  </tr>  </table>   <!-- Left menu end -->   </td>  <td width="95%">   <!-- Main content view start -->    <?   print( $MainContents );   ?>   <!-- Main content view end -->  </td>  </tr>  </table>   <?  // Store the statistics with a callback image.  // It will be no overhead with this method for storing stats  //   $StoreStats = $ini->read_var( "eZStatsMain", "StoreStats" );   if ( $StoreStats == "enabled" )  {    // create a random string to prevent browser caching.    $seed = md5( microtime() );    // callback for storing the stats    $imgSrc = $GlobalSiteIni->WWWDir . "/stats/store/rx$seed-" .                $REQUEST_URI . "1x1.gif";    print( "<img src="$imgSrc" height="1"".     &oo@