<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IPB, WordPress, IP.Board, php-Fusion, Invision Power Board &#187; URL</title>
	<atom:link href="http://pronets.ru/tag/url/feed/" rel="self" type="application/rss+xml" />
	<link>http://pronets.ru</link>
	<description>Моды, Плагины, Форум IPB (IP.Board, Invision Power Board), Cms php-Fusion, Блог WordPress</description>
	<lastBuildDate>Tue, 31 Aug 2010 20:10:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Прочие возможности</title>
		<link>http://pronets.ru/prochie-vozmozhnosti/</link>
		<comments>http://pronets.ru/prochie-vozmozhnosti/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 22:09:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Бан]]></category>
		<category><![CDATA[Возможности]]></category>
		<category><![CDATA[Логин]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[Прочие]]></category>
		<category><![CDATA[Прочие возможности]]></category>
		<category><![CDATA[Сайт]]></category>
		<category><![CDATA[стили]]></category>
		<category><![CDATA[темы]]></category>
		<category><![CDATA[Установка]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=533</guid>
		<description><![CDATA[Какое-то время мы описывали большие изменения, которые вы увидите при выходе IP.Board 3. Вещи, вроде улучшенного управления BBКодами, системы хуков и плагинов, системы личного общения, к примеру, являются более интересными, нежели описание множества маленьких возможностей. Однако настал момент, когда необходимо уделить некоторое время для ознакомления с несколькими малыми улучшениями, которые добавлены в IP.Board 3 и [...]]]></description>
			<content:encoded><![CDATA[<p>Какое-то время мы описывали большие изменения, которые вы увидите при выходе <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3. Вещи, вроде улучшенного управления BBКодами, системы хуков и плагинов, системы личного общения, к примеру, являются более интересными, нежели описание множества маленьких возможностей. Однако настал момент, когда необходимо уделить некоторое время для ознакомления с несколькими малыми улучшениями, которые добавлены в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 и о которых мы еще не рассказывали.</p>
<p><span id="more-533"></span></p>
<h4>Минимальное количество сообщений для просмотра форума</h4>
<p> </p>
<p>Теперь вы можете настроить ваши форумы так, что доступ к ним будет только у пользователей, набравших определенное количество сообщений.</p>
<p> </p>
<h4>Минимальное количество сообщений для ответа в форум</h4>
<p> </p>
<p>Опция, аналогичная предыдущей — теперь вы сможете разрешить пользователям оставлять сообщения в конкретном форуме только после того, как они наберут необходимое количество сообщений.</p>
<p> </p>
<h4>Только авторы могут видеть свои темы</h4>
<p> </p>
<p>Довольно часто пользователи запрашивали такую возможность. Отныне вы вправе разрешить пользователям в определенном форуме видеть только созданные ими темы. Конечно же эти темы смогут видеть модераторы и администраторы. Данная опция позволит вам создавать форумы в стиле &#8220;help-desk&#8221; (форумы поддержки) без привлечения дополнительных приложений.</p>
<p> </p>
<h4>HTTPS форма входа</h4>
<p> </p>
<p>Появилась возможность привязать форму входа к <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">url</a> использующим https, осуществляется это простой настройкой в админцентре. Однако получение SSL сертификата для сервера и его установка на сервер все же остается вашей обязанностью.</p>
<p> </p>
<h4>&#8220;Режим производительности&#8221;</h4>
<p> </p>
<p>Мы работаем с несколькими крупными клиентами, которые обладают форумами, трафик на которых достаточно равномерен, однако временами бывают огромные всплески активности (например, связанные с какими-либо событиями). Во время данных всплесков часто бывает необходимо отключить не нужные опции для поддержания жизнеспособности сайта. Настройка режима производительности позволяет вам легко отключать множество опций, тем самым экономя ресурсы, одним кликом. Сама система запоминает значение настроек перед включением режима производительности, что позволяет вам вернуть систему в прежнее состояние при уменьшении активности отключив данный режим.</p>
<p> </p>
<h4>Регистрация &#8220;вопрос и ответ&#8221;</h4>
<p> </p>
<p>В третьей версии форума вам будет доступна возможность настройки вопросов и ответов на них, которые будут случайным образом выведены на странице регистрации, тем самым усилив защиту от автоматических регистраций.</p>
<p> </p>
<h4>Загрузка javascript файлов через Google</h4>
<p> </p>
<p>Google предоставляет сервис, позволяющий загружать файлы библиотек prototype и scriptaculous с их серверов. Тем самым разгрузив ваш сервер на 2 HTTP запроса, к тому же позволяя самим серверам гугла управлять правильными заголовками кеширования данных файлов.</p>
<p> </p>
<h4>Выбор стиля и языка для гостей</h4>
<p> </p>
<p>Отныне гости могут сменять стиль и язык интерфейса, если на вашем форуме их несколько. Стоит заметить что доступ к стилям может быть настроен для каждой группы, тем самым вы можете легко настраивать какие стили будут видны гостям, а какие нет.</p>
<p> </p>
<h4>Улучшение управления подпиской на тему/форум</h4>
<p> </p>
<p>Появилась возможность отписывать конкретных пользователей от всех форумов и тем (настройка доступна в админцентре на странице редактирования пользователя), а так же вы сможете отписывать всех пользователей от конкретных форумов.</p>
<p> </p>
<h4>Расширение управления &#8220;друзьями&#8221;</h4>
<p> </p>
<p>Теперь вы можете отключать возможность &#8220;друзья&#8221; на форуме полностью и индивидуально для групп пользователей (например отключить опцию у группы пользователей требующих активации email)</p>
<p> </p>
<h4>Скрыть информацию о последнем сообщении для форума</h4>
<p> </p>
<p>Если у вас есть форумы где различные группы пользователей имеют различные права доступа к просмотру тем, то бывает полезно скрыть информацию о последнем сообщении форума с главной страницы, теперь вы сможете сделать так.</p>
<p> </p>
<h4>Поля контактов &#8211; дополнительные поля профиля</h4>
<p> </p>
<p>Все поля контактов (yahoo, aim, msn, и прочее) теперь перенесены в дополнительные поля, что позволяет вам легко настраивать их в связи со своими потребностями (или просто удалить их). В дополнении к уже существующим полям мы добавили поля Jabber и Skype.</p>
<p> </p>
<h4>Настройка принудительной скрытности для групп</h4>
<p> </p>
<p>Если вам нужно, чтобы пользователи из групп (например, администраторы или забанненые пользователи) при логине отмечались, как скрытые то в версии 3 это будет возможно.</p>
<p> </p>
<h4>Премодерация сообщений от пользователей определенных групп</h4>
<p> </p>
<p>В новой версии появилась возможность настраивать группы так, чтобы сообщения от пользователей из этих групп на всех форумах премодерировались.</p>
<p> </p>
<h4>Настройки подписи для групп</h4>
<p> </p>
<p>Появилась возможность устанавливать максимальное количество изображений, строчек текста и размеры изображений в подписи для каждой группы пользователей.</p>
<p>Пожалуй это все, надеемся что вам понравились новые возможности форума.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/temyi/" title="темы" rel="tag nofollow">темы</a>, <a href="http://pronets.ru/tag/ipb/" title="IPB" rel="tag nofollow">IPB</a>, <a href="http://pronets.ru/tag/prochie/" title="Прочие" rel="tag nofollow">Прочие</a>, <a href="http://pronets.ru/tag/ip-board/" title="IP.Board" rel="tag nofollow">IP.Board</a>, <a href="http://pronets.ru/tag/ipboard-3/" title="IP.Board 3" rel="tag nofollow">IP.Board 3</a>, <a href="http://pronets.ru/tag/sayt/" title="Сайт" rel="tag nofollow">Сайт</a>, <a href="http://pronets.ru/tag/url/" title="URL" rel="tag nofollow">URL</a>, <a href="http://pronets.ru/tag/stili/" title="стили" rel="tag nofollow">стили</a>, <a href="http://pronets.ru/tag/vozmozhnosti/" title="Возможности" rel="tag nofollow">Возможности</a>, <a href="http://pronets.ru/tag/ban/" title="Бан" rel="tag nofollow">Бан</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/7-luchshih-sposobov-nastroyki-vashego-sayta/" title="7 лучших способов настройки Вашего сайта (03/01/2009)">7 лучших способов настройки Вашего сайта</a> (0)</li>
	<li><a href="http://pronets.ru/ispolzovanie-satellitov-v-prodvizhenii-saytov/" title="Использование сателлитов в продвижении сайтов (24/06/2008)">Использование сателлитов в продвижении сайтов</a> (0)</li>
	<li><a href="http://pronets.ru/perenos-sayta-s-lokalnoy-mashinyi/" title="Перенос сайта с локальной машины (16/06/2008)">Перенос сайта с локальной машины</a> (0)</li>
	<li><a href="http://pronets.ru/kratkiy-slovarik-spetsialista-po-prodvizheniyu-saytov/" title="Краткий словарик специалиста по продвижению сайтов (31/08/2008)">Краткий словарик специалиста по продвижению сайтов</a> (0)</li>
	<li><a href="http://pronets.ru/tegi-shablonov-perezagruzka/" title="Теги шаблонов, перезагрузка (04/06/2009)">Теги шаблонов, перезагрузка</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/prochie-vozmozhnosti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Оптимизация для поисковых систем</title>
		<link>http://pronets.ru/optimizatsiya-dlya-poiskovyih-sistem/</link>
		<comments>http://pronets.ru/optimizatsiya-dlya-poiskovyih-sistem/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 21:55:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[блок]]></category>
		<category><![CDATA[Дизайн]]></category>
		<category><![CDATA[копирайт]]></category>
		<category><![CDATA[Оптимизация]]></category>
		<category><![CDATA[Оптимизация для поисковых систем]]></category>
		<category><![CDATA[Поисковик]]></category>
		<category><![CDATA[Поисковые]]></category>
		<category><![CDATA[Сайт]]></category>
		<category><![CDATA[Система]]></category>
		<category><![CDATA[Системы]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[стили]]></category>
		<category><![CDATA[темы]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=525</guid>
		<description><![CDATA[Мы весьма часто получаем запросы: «Добавьте SEO в IPB». Это очень сложный запрос для выполнения. Что такое SEO? Что не так в IPB для индексации поисковиками? Что можно сделать лучше?
Мы разделили предложения на те, которые есть смысл разрабатывать сейчас, и те, которые можно оставить для модификаций. Пока мы не полностью освоили SEO для форумов, мы [...]]]></description>
			<content:encoded><![CDATA[<p>Мы весьма часто получаем запросы: «Добавьте <a href="http://pronets.ru/tag/seo/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with SEO">SEO</a> в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a>». Это очень сложный запрос для выполнения. Что такое <a href="http://pronets.ru/tag/seo/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with SEO">SEO</a>? Что не так в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> для индексации поисковиками? Что можно сделать лучше?</p>
<p>Мы разделили предложения на те, которые есть смысл разрабатывать сейчас, и те, которые можно оставить для модификаций. Пока мы не полностью освоили <a href="http://pronets.ru/tag/seo/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with SEO">SEO</a> для форумов, мы внесли изменения в <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> 3 только там, где по нашему мнению это поможет улучшить индексацию поисковыми системами. Эта статья даст более детальную информацию по данным улучшениям.<br />
<span id="more-525"></span></p>
<p><strong>Семантически корректный HTML</strong></p>
<p>&#8220;Семантика&#8221; — наука о понимании определённых знаков, последовательностей символов и других условных обозначений. По существу, когда мы используем данный термин говоря о HTML документе, мы хотим показать что HTML теги в исходном коде документа используются исключительно в соответствии со структурой документа. Совсем недавно, для позиционирования элементов на странице использовались таблицы, для создания отступов использовали однопиксельные gif картинки. Те дни ушли и сегодня современные вебстраницы разрабатываются с использованием подходов создания качественного HTML кода.</p>
<p>Разрабатываемый <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 будет xHTML «валидным», а исходный код будет семантически корректным. Запрещенные HTML-теги не используются, ушло чрезмерное употребление тегов (например div’ы тройной вложенности), javasciprt больше не навязывается (*см. комментарии). Темы новой версии форума устройства для чтения и поисковые системы должны считывать намного легче, чем в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 2. Кроме того, все функции должны работать (хотя в некоторых случаях в меньшей степени), даже когда javascript отключен. Теги заголовков используются должным образом и показывают ключевые слова содержимого страницы. Для заголовков используются стили, что позволяет «представлять» их содержание наилучшим способом.</p>
<p>*Примечание: HTML будет семантическим, а javascript не навязчивым настолько, насколько это возможно. Есть тысячи конфигураций, много разных браузеров, настроек и дополнений, так что невозможно гарантировать во всем этом многообразии единства представления контента. Rikki рассказывал подробнее о целях, которые мы преследуем при разработке нового дизайна в другой статье, доступной вам.</p>
<p><strong>Поддержка микроформатов (Microformats)</strong></p>
<p>Микроформаты (Microformats) представляют собой спецификацию способа представления однородных данных. Например, не редко на сайте возникает необходимость размещать некоторые новости или статьи, а также хранить страницу профиля для каждого пользователя. Микроформаты был разработаны так, чтобы эти общие данные могли бы быть представлены общим способом. Используя микроформаты, другие интернет-страницы и скрипты могут корректно обрабатывать вашу страницу, чтобы извлечь из нее данные для последующего использования. Даже Internet Explorer 8 будет поддерживать Microformats для некоторых его новых возможностей, в то время как другие браузеры или планируют, или уже поддерживают микроформаты.</p>
<p><a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 использует несколько микроформатов. Это hCard, hCalendar, rel-nofollow, rel-tag, и rel-home микроформаты. Мы также используем некоторые другие общие атрибуты (такие как &#8220;rel=&#8217;help&#8217;&#8221; для ссылки на документацию), это при том, что они не настолько необходимы на данный момент. Кроме того, мы будем продолжать следить за микроформатами и применять их при необходимости в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board.</p>
<p><strong>Поддержка rel=&#8217;nofollow&#8217;</strong></p>
<p>Это еще один популярный запрос наших клиентов: сделать так чтобы все публикуемые ссылки в темах имели атрибут «rel=&#8217;nofollow&#8217;». С другой стороны многие просили, чтобы мы не делали этого. Идея данного изменения состоит в том, что поисковые системы должны по «rel=&#8217;nofollow&#8217;» понимать, что владелец форума не отвечает за содержимое находящееся по ссылке. Таким образом поисковая система не должна «оштрафовать» или заблокировать сайт, на котором размещена эта ссылка (например в случае если ссылка окажется битой или несоответствующей содержимому).</p>
<p>Мы добавили опцию для возможности настройки включения/отключения этого без редактирования исходных кодов. Атрибут «rel=&#8217;nofollow&#8217;» будет автоматически добавлен ко всем вставляемым <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> адресам (при включенной настройке).</p>
<p>Удаление &#8220;(Работает на <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a>)&#8221; с главной страницы.<br />
Во всех версиях <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> заголовок главной страницы содержал эту фразу (если вы не покупали услугу удаления копирайтов). Мы не запрещали пользователям удалять его через исходные коды, многие именно так и поступали.</p>
<p>Но теперь мы пошли дальше и удалили этот текст из заголовка в базовом дистрибутиве.</p>
<p><strong>Удаление текстовой версии</strong></p>
<p>Текстовая версия <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board предназначалась для упрощенного представления темы или форума. Это было полезно, как для поисковых систем, так и для браузеров мобильных устройств. Опция была на столько используема, что фактически в поисковой системе, находя ссылку на тему форума, показывалась ссылку на текстовую, а не полную версию, страницы.</p>
<p>В <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 мы исключили текстовую версию полностью благодаря новым возможностям ядра системы. Мобильный стиль теперь может быть установлен непосредственно в админцентре, что делает ненужным отдельный скрипт для вывода содержимого в другом формате. И все это благодаря использованию MVC паттерна &#8211; оставляем модель и контроллер, а сами просто изменяем представление.</p>
<p>По отношению к оптимизации под поисковые системы данное нововведение убирает очевидное дублирование текстовой и полной версией содержание одного и того же материала, что обычно ухудшает позиции в поисковиках.</p>
<p>Изменнеие способов отображения темы перенесено в личную панель пользователя<br />
Часто поисковики индексировали темы в <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> с использованием различных видов отображения темы, по некоторым непонятным причинам «наилучшим» видом оказывался содержащий в адресе «&#038;mode=outline». И хотя это не препятствовало посещению страницы, однако, серьезно влияло на восприятие тем, потому что многие пользователи пугались при виде не стандартного представления темы и не знали, как перейти в привычный режим отображения.</p>
<p>Многие пользователи действительно используют различных варианты отображения тем (которые каждый пользователь может настраивать под себя), поэтому мы перенесли возможность изменения вида в личную панель пользователя, а, заодно, решили проблему индексации тем в нестандартных режимах поисковыми машинами.</p>
<p>Есть еще много незначительных, но важных улучшений, которые заложены глубоко внутри <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3. Они должны помочь улучшить индексацию вашего форума в поисковых системах. В тоже время мы не будем углубляться в <a href="http://pronets.ru/tag/seo/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with SEO">SEO</a> разработки, однако, обещаем обязательно осуществлять доработки, которые помогут нашим пользователям добиваться успеха с <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a>.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/optimizatsiya/" title="Оптимизация" rel="tag nofollow">Оптимизация</a>, <a href="http://pronets.ru/tag/poiskovik/" title="Поисковик" rel="tag nofollow">Поисковик</a>, <a href="http://pronets.ru/tag/invision-power-board/" title="Invision Power Board" rel="tag nofollow">Invision Power Board</a>, <a href="http://pronets.ru/tag/ipboard/" title="Форум IP.Board" rel="tag nofollow">Форум IP.Board</a>, <a href="http://pronets.ru/tag/sistemyi/" title="Системы" rel="tag nofollow">Системы</a>, <a href="http://pronets.ru/tag/temyi/" title="темы" rel="tag nofollow">темы</a>, <a href="http://pronets.ru/tag/ipb/" title="IPB" rel="tag nofollow">IPB</a>, <a href="http://pronets.ru/tag/kopirayt/" title="копирайт" rel="tag nofollow">копирайт</a>, <a href="http://pronets.ru/tag/sayt/" title="Сайт" rel="tag nofollow">Сайт</a>, <a href="http://pronets.ru/tag/blok/" title="блок" rel="tag nofollow">блок</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/novyie-sistemyi-paroley/" title="Новые системы паролей (16/01/2009)">Новые системы паролей</a> (0)</li>
	<li><a href="http://pronets.ru/osnova-dlya-sozdaniya-sayta/" title="Основа для создания сайта (27/04/2010)">Основа для создания сайта</a> (0)</li>
	<li><a href="http://pronets.ru/obnovlenie-ipboard/" title="Обновление (upgrade) IP.Board (31/08/2008)">Обновление (upgrade) IP.Board</a> (0)</li>
	<li><a href="http://pronets.ru/gid-po-css-ip-board-3-0-x/" title="Гид по CSS IP.Board 3.0.x (08/08/2009)">Гид по CSS IP.Board 3.0.x</a> (0)</li>
	<li><a href="http://pronets.ru/pravilnaya-podgotovka-k-razrabotke-sayta/" title="Правильная Подготовка К Разработке Сайта (01/03/2009)">Правильная Подготовка К Разработке Сайта</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/optimizatsiya-dlya-poiskovyih-sistem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Наконец-то, дружественные URL&#8217;ы!</title>
		<link>http://pronets.ru/nakonets-to-druzhestvennyie-urlyi/</link>
		<comments>http://pronets.ru/nakonets-to-druzhestvennyie-urlyi/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 21:23:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[2.3.x]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[URL'ы]]></category>
		<category><![CDATA[Дружественные]]></category>
		<category><![CDATA[Дружественные URL'ы]]></category>
		<category><![CDATA[модификации]]></category>
		<category><![CDATA[темы]]></category>
		<category><![CDATA[форум]]></category>
		<category><![CDATA[ЧПУ]]></category>
		<category><![CDATA[шаблоны]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=518</guid>
		<description><![CDATA[Наверное, одной из самых запрашиваемых возможностей, которые мы получали с момента самой первой версии IP.Board были &#8216;дружественные URLы&#8217; (ЧПУ).
Я крайне осторожно попытался избежать фразы &#8220;Поисковая оптимизация&#8221; в первом параграфе, несмотря на то, что она достаточно часто мелькала в запросах ЧПУ. Конечно же то, что мы добавили, несомненно помогает поисковой оптимизации, но важно понимать, что ЧПУ [...]]]></description>
			<content:encoded><![CDATA[<p>Наверное, одной из самых запрашиваемых возможностей, которые мы получали с момента самой первой версии <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board были &#8216;дружественные <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>ы&#8217; (ЧПУ).</p>
<p>Я крайне осторожно попытался избежать фразы &#8220;Поисковая оптимизация&#8221; в первом параграфе, несмотря на то, что она достаточно часто мелькала в запросах ЧПУ. Конечно же то, что мы добавили, несомненно помогает поисковой оптимизации, но важно понимать, что ЧПУ не является готовым решением для оптимизации и не может быть им.<br />
<span id="more-518"></span></p>
<p><strong>Итак, что же мы сделали?</strong></p>
<p>Если объяснять коротко, то ЧПУ! Однако процесс создания и управления ими куда более интересные вещи, нежели конечный результат, но наберитесь терпения об эти процессах вы узнаете чуть позже. Давайте в начале посмотрим на примеры наших новых <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>ов.</p>
<p><strong>Примеры ссылок для <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 2.3.x:</strong></p>
<p>Для перехода в форум (My Test Forum):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php?showforum=10</span></pre></div></div>

<p>Для перехода в тему (My Test Topic):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php?showtopic=99</span></pre></div></div>

<p>Для просмотра пользователя (Matt Mecham):</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php?showuser=30</span></pre></div></div>

<p>Данные ссылки вполне нормальные. Они короткие и лаконичные, да и поисковики их воспринимают хорошо, но мы их можем сделать немного лучше чтобы добиться их большей привлекательности. Посмотрим?</p>
<p>Для серверов на базе Windows можно использовать &#8216;query&#8217; метод генерации ссылок, тогда <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> выглядят так:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php?/forum/10/my-test-forum </span>
http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php?/top...9/my-test-topic </span>
http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php?/user/30/matt-mecham</span></pre></div></div>

<p>В других случаях есть метод &#8216;path_info&#8217; и ссылки выглядят так:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php/forum/10/my-test-forum </span>
http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php/topic/99/my-test-topic </span>
http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/index.php/user/30/matt-mecham</span></pre></div></div>

<p>Еще лучше если вы имеете возможность вносить настройки в ваш .htaccess файл и у вас есть mod_rewrite. Для удобства наша система сгенерирует правила для mod_rewrite. И тогда конечный результат будет таким:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/forum/10/my-test-forum </span>
http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/topic/99/my-test-topic </span>
http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/user/30/matt-mecham</span></pre></div></div>

<p>А что будет, если использовать диакритические знаки, например как здесь: Mått Méçhåm? Они будут просто заменены наиболее подходящими аналогами. Для этого примера на &#8220;matt-mecham&#8221;.</p>
<p><strong>Как я смогу использовать их?</strong></p>
<p>Самый простой способ получить &#8220;дружественный <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>&#8221; использовать {parse} тег:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse url<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;showtopic=99&quot;</span> base<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;public&quot;</span> seotitle<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;my-test-topic&quot;</span> template<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;showtopic&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Параметр &#8220;seotitle&#8221; уже готовая строчка для использования в <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>. Если вам хочется создать данный параметр налету для получения чего-то более дружественного, вы можете использовать такую конструкцию:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse url<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;showtopic=99&quot;</span> base<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;public&quot;</span> seotitle<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%%</span>My Test Topic<span style="color: #009933; font-weight: bold;">%%</span>&quot;</span> template<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;showtopic&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Дополнительный параметр &#8220;template&#8221; указывает какой шаблон стоит использовать системе при генерации ссылки. Управление данными шаблонами осуществляется в единственном файле &#8220;admin/extensions/seoUrlTemplates.php&#8221;. Ниже пример содержимого такого файла:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$templates</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
<span style="color: #666666; font-style: italic;"># APP: MEMBERS
</span><span style="color: #0000ff;">'showuser'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'out'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'showuser=(.+?)(&amp;|$)'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user/$1/#{__title__}$2'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
<span style="color: #0000ff;">'in'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;/user/(\d+?)/&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'showuser'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># APP: FORUMS
</span><span style="color: #0000ff;">'showforum'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'out'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'showforum=(.+?)(&amp;|$)'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'forum/$1/#{__title__}$2'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
<span style="color: #0000ff;">'in'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;/forum/(\d+?)/&quot;</span>  <span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'showforum'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
&nbsp;
<span style="color: #0000ff;">'showtopic'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'out'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'showtopic=(.+?)(&amp;|$)'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'topic/$1/#{__title__}$2'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
<span style="color: #0000ff;">'in'</span>         <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;/topic/(\d+?)/&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'showtopic'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
&nbsp;
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В примере показаны шаблон для ссылок на профиль пользователя, форумы и темы. В поле &#8216;out&#8217; показано как строить ссылки, а в поле &#8216;in&#8217; &#8211; как данные ссылки обрабатывать <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board.</p>
<p>Данные настройки позволяют вам настроить систему в соответствии с вашим представлением о ЧПУ. Авторы модификации смогут добавлять в данный файл записи (через интерфейс админцентра) необходимые для их модификаций и модулей.</p>
<p>Я ранее заметил что &#8220;template&#8221; дополнительный параметр. В случае если вы не укажете его, то <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board проверит все шаблоны и выберет подходящий. Но все же мы рекомендовали бы явно указывать шаблон, потому как это несколько ускоряет процесс обработки ссылок в системе.</p>
<p>Любые переменные, не учтенные в шаблонах, добавляются в конец <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>, разделяя через символ подчеркивания, например, так:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//www.board.com/forums/topic/99/my-test-topic/_/view/getNewPost</span></pre></div></div>

<p>Данная возможность избавляет от необходимости учитывать всевозможные перестановки в файле шаблонов и при этом не терять данные.</p>
<p>Мы надеемся, что реализация данного популярного запроса поможет вам сделать более <a href="http://pronets.ru/tag/seo/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with SEO">SEO</a> форум и сделать общие ссылки более приятными!</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/23x/" title="2.3.x" rel="tag nofollow">2.3.x</a>, <a href="http://pronets.ru/tag/temyi/" title="темы" rel="tag nofollow">темы</a>, <a href="http://pronets.ru/tag/ip/" title="IP" rel="tag nofollow">IP</a>, <a href="http://pronets.ru/tag/druzhestvennyie-urlyi/" title="Дружественные URL&#039;ы" rel="tag nofollow">Дружественные URL&#039;ы</a>, <a href="http://pronets.ru/tag/urlyi/" title="URL&#039;ы" rel="tag nofollow">URL&#039;ы</a>, <a href="http://pronets.ru/tag/invision-power-board-3/" title="Invision Power Board 3" rel="tag nofollow">Invision Power Board 3</a>, <a href="http://pronets.ru/tag/druzhestvennyie/" title="Дружественные" rel="tag nofollow">Дружественные</a>, <a href="http://pronets.ru/tag/modifikatsii/" title="модификации" rel="tag nofollow">модификации</a>, <a href="http://pronets.ru/tag/ipb-3/" title="IPB 3" rel="tag nofollow">IPB 3</a>, <a href="http://pronets.ru/tag/shablonyi/" title="шаблоны" rel="tag nofollow">шаблоны</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/prakticheskie-rekomendatsii-po-raskrutke-sayta/" title="Практические рекомендации по раскрутке сайта (16/06/2008)">Практические рекомендации по раскрутке сайта</a> (0)</li>
	<li><a href="http://pronets.ru/izmenenie-nazvanie-tegov-na-russkiy-yazyik-v-20h/" title="Изменение название тегов, на русский язык в 2.0.х (14/03/2009)">Изменение название тегов, на русский язык в 2.0.х</a> (0)</li>
	<li><a href="http://pronets.ru/vvedenie-v-razrabotku/" title="Введение в разработку (03/06/2009)">Введение в разработку</a> (0)</li>
	<li><a href="http://pronets.ru/globalnyie-prava-dostupa/" title="Глобальные права доступа (04/06/2009)">Глобальные права доступа</a> (0)</li>
	<li><a href="http://pronets.ru/esli-ne-rabotaet-ssyilka-udalit-ustanovlennyie-forumom-cookies/" title="Если не работает ссылка &#8220;Удалить установленные форумом cookies&#8221; (22/03/2009)">Если не работает ссылка &#8220;Удалить установленные форумом cookies&#8221;</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/nakonets-to-druzhestvennyie-urlyi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Дополнения и хаки</title>
		<link>http://pronets.ru/dopolneniya-i-haki/</link>
		<comments>http://pronets.ru/dopolneniya-i-haki/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 21:00:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[downloads]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Дополнение]]></category>
		<category><![CDATA[Дополнения]]></category>
		<category><![CDATA[Дополнения и хуки]]></category>
		<category><![CDATA[модификации]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[поддержка]]></category>
		<category><![CDATA[Сайт]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[темы]]></category>
		<category><![CDATA[Хак]]></category>
		<category><![CDATA[хаки]]></category>
		<category><![CDATA[Хук]]></category>
		<category><![CDATA[Хуки]]></category>
		<category><![CDATA[шаблоны]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=505</guid>
		<description><![CDATA[Готов поспорить, что многие из вас ждали эту запись. Однако мы хотели быть уверены в том, что большая часть системы реализована прежде чем описывать ее. И вот теперь когда система завершена, мы готовы описать ее!

Общее представление
 
Во-первых, давайте дадим определение термину хук (&#8221;hook&#8221;), который будет использовать в данной записи. Итак, хук &#8211; это точка выполнения стороннего [...]]]></description>
			<content:encoded><![CDATA[<p>Готов поспорить, что многие из вас ждали эту запись. Однако мы хотели быть уверены в том, что большая часть системы реализована прежде чем описывать ее. И вот теперь когда система завершена, мы готовы описать ее!</p>
<p><span id="more-505"></span></p>
<h4>Общее представление</h4>
<p> </p>
<p>Во-первых, давайте дадим определение термину хук (&#8221;hook&#8221;), который будет использовать в данной записи. Итак, хук &#8211; это точка выполнения стороннего кода, в ней происходит вызов и выполнение кода автора модификации и возврат к исполнению основного кода <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board. Дополнение (&#8221;plugin&#8221;) &#8211; это набор хуков (т.е. модификация может содержать несколько хуков из 2 или 3 файлов, но мы все равно ее будем считать единой модификацией, которую и будем называть дополнением).</p>
<p><a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3, как и обещалось, будет использовать новую систему хуков и дополнений для авторов модификаций. Сама система относительно всесторонняя, без большого количества &#8220;точек хуков&#8221; (места вызова стороннего кода, вручную вставляемые в исходные файлы), потому что это в конечном счете потребовало бы сложного обслуживания бесконечных запросов &#8220;могли бы Вы добавлять точку хука в xyz местоположение&#8221;. Мы хотели предоставить с форумом решение, которое было бы расширяемым, которым легко было бы управлять и поддерживать, и которое бы удовлетворяло большинству нужд разработчиков без необходимости изменения исходного кода ядра. В то же время во время разработки новой системы хуков мы осознали, что не можем и не хотим сложить всю ответственность за модифицирование на систему шаблонов. И хотя, вероятно, изменить стиль намного проще, чем исходный код файла, полный перенос ответственности не решит проблему, над которой мы упорно работаем. Конечная цель, конечно, предоставить вам возможность улучшать ваши форумы вообще без изменения исходных файлов. Более того, это сделает простым обновление, так как вам больше не надо будет переустанавливать модификации, более простой станет поддержка, так как мы сможем просто отключить ваши хуки, без необходимости проверять все файлы на наличие изменений, ну и конечно же вам не надо будет тратить по 30 минут на добавление кода модификаций в код форума по инструкции для установки оной.</p>
<p> </p>
<h4>Работа системы хуков и дополнений для конечных пользователей</h4>
<p> </p>
<p>Добавлена новая страница в администраторской панели для управления хуками, на ней выводится список всех установленных в системе хуков. С этой страницы вы легко можете отключать и включать хуки, а так же определять порядок выполнения их (хотя в большинстве случаев это не имеет значения, опция существует для тех случаев, когда один плагин должен внедрить свой хук в другой плагин). Так же на данной странице вам будет доступна информация, которую предоставил автор, о самом дополнении (такая как имя автора, email адрес и его сайт, а так же все файлы принадлежащие данному дополнению), вы сможете проверить соответствие вашей системы минимальным/максимальным версиям PHP и <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a>, которые необходимы для работы хука. Хук система так же поддерживает механизм обновления с использованием <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> проверки версии, таким образом автор может оповещать вас о выходе новой версии мода.</p>
<p>Для установки хука вам просто необходимо загрузить XML файл через админцентр! Система хуков по принципам близка к популярной модификации Universal Mod Installer для ранних версий <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board, она так же запускает необходимые запросы для базы данных, импортирует настройки, языки, шаблоны стиля, модули, задачи, файлы помощи пользовательской и администраторской частей. Так же процесс установки хука поддерживает исполнение дополнительных скриптов, которые бывают необходимы в случае если процессу установки необходимо выполнить действия, которые не поддерживаются в самой системе установки хука. Аналогично, при удалении хука все изменения автоматически отменяются, а дополнительный скрипт производит дополнительную очистку, если это необходимо.</p>
<p>Все действительно так просто. Импортируете XML файл и сразу же видите изменения в своей системе.</p>
<p> </p>
<h4>Работа системы хуков и дополнений на системном уровне</h4>
<p> </p>
<p>При импортировании хуков в админцентре сами хуки кеширутся в директорию /hooks. Система использует хуки, которые зарегистрированы через админцентр, это позволяет предотвратить утечку ресурсов, которая может произойти при попытке использовать хуки, не существующие в данный момент в системе.В <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 введено три типа хуков:</p>
<ul>
<li>Перегрузчики действий (Action overloaders)</li>
<li>Перегрузчики стилей (Skin overloaders)</li>
<li>Хуки шаблонов (Template hooks)</li>
</ul>
<p>Перегрузчики действий позволяют вам расширять файлы действий, что позволяет сделать фактически все, что вы только можете представить. Примером данного расширения может быть изменение файла главной страницы форума (списка форумов): вы добавляете дополнительную информацию для вывода к $this-&gt;output, а затем вызываете parent::doExecute() для того, чтобы позволить <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board закончить загрузку списка форумов с вашими изменениями. Или вы можете изменить исходный файл таким образом, чтобы после отправки формы дополнительные данные сохранялись в базе. Большинство методов в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board объявлены как protected, поэтому вы будете иметь полный доступ к ним в ваших расширяющих классах.</p>
<p>Перегрузчики стилей работают аналогично перегрузчикам действий, с той лишь разницей, что расширяется файл стиля. Хорошим примером того, для чего вам возможно будет необходимо использовать данный тип хуков &#8211; полное изменение шаблона содержимого, если пользователь попадает под какие-то условия или, например, если вы хотите избавить администратора от внесения изменения в шаблоны.И, наконец, хуки шаблонов. Во время вывода контента, если ваш хук включен, он исполняется, и HTML комментарий заменяется данными, поступившими из вашего хука. Перед и после каждого цикла foreach, конструкции if, и конструкции else, добавляются HTML комментарии в HTML выдаче (автоматически при помощи нашей системы стилей) с определенным синтаксисом . Вы регистрируете ваш хук шаблона в админцентре указывая в каком стиле вам необходимо применить данный хук. Во время вывода контента, если ваш хук включен, он исполняется и HTML комментарий заменяется данными, поступившими, из вашего хука.В целом, новая система предоставляет методы для инъекции кода в исходный код и в результаты вывода. Что покрывает основную часть необходимых для разработчика областей.</p>
<p>Мы планируем предоставить несколько примеров с выходом <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Gallery, <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Blog и <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Downloads. Я не буду раскрывать подробности сейчас, но некоторые вещи, которые наши пользователи просили реализовать нас и в реализации которых мы отказывали по причине необходимости изменять исходный код <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board, теперь стали возможными, что позволило сделать интеграцию наших продуктов более плотной на сколько это возможно.</p>
<p> </p>
<h4>Работа хуков и дополнений для разработчиков</h4>
<p> </p>
<p>В панеле администратора вы создаете новое дополнение, заполняете несколько базовых полей такие как автор, название дополнения и сайт. Затем создаете файлы хуков и в форме создания нового дополнения выбираете какие файлы являются частью дополнения (количество файлов не ограничено). И дальше пишете модификацию как обычно.</p>
<p> </p>
<p>При экспортировании плагина вы в интерактивном режиме настраиваете системные настройки, группы настроек, языковые конструкции, шаблоны стиля, модули, файлы помощи, дополнительные скрипты установки/удаления, задачи и изменения в базе данных. Если вы уже использовали universal mod installer, наша система будет похожа на него, с главным отличием, что вы настраиваете эти детали в интерактивном режиме, а не ручной правкой XML файла.И, наконец, когда вы экспортируете хук, ваш код собирается и добавляется в XML файл. Процесс импорта хука заботится о создании кеша кода в системе и импортирования всех данных, которые вы настроили при экспорте дополнения.</p>
<p> </p>
<h4>В заключении</h4>
<p> </p>
<p>Перед началом написания данной записи мы попробовали создать 5 различных популярных модификаций, чтобы убедиться что мы сможем реализовать каждую из этих модификаций без внесения правок в исходный код <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 &#8211; и мы прошли данный тест. Мы планируем предоставить больше информации по системе для разработчиков ближе к выходу <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3, чтобы помочь им изучить новую систему.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/ipboard-3/" title="IP.Board 3" rel="tag nofollow">IP.Board 3</a>, <a href="http://pronets.ru/tag/downloads/" title="downloads" rel="tag nofollow">downloads</a>, <a href="http://pronets.ru/tag/plagin/" title="плагин" rel="tag nofollow">плагин</a>, <a href="http://pronets.ru/tag/ipb-3/" title="IPB 3" rel="tag nofollow">IPB 3</a>, <a href="http://pronets.ru/tag/podderzhka/" title="поддержка" rel="tag nofollow">поддержка</a>, <a href="http://pronets.ru/tag/shablonyi/" title="шаблоны" rel="tag nofollow">шаблоны</a>, <a href="http://pronets.ru/tag/sayt/" title="Сайт" rel="tag nofollow">Сайт</a>, <a href="http://pronets.ru/tag/dopolneniya/" title="Дополнения" rel="tag nofollow">Дополнения</a>, <a href="http://pronets.ru/tag/huki/" title="Хуки" rel="tag nofollow">Хуки</a>, <a href="http://pronets.ru/tag/ip-board/" title="IP.Board" rel="tag nofollow">IP.Board</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/css_pro/" title="Гид по CSS (Pro Skin) (25/07/2008)">Гид по CSS (Pro Skin)</a> (0)</li>
	<li><a href="http://pronets.ru/komu-doverit-sozdanie-korporativnogo-sayta/" title="Кому доверить создание корпоративного сайта? (08/09/2009)">Кому доверить создание корпоративного сайта?</a> (0)</li>
	<li><a href="http://pronets.ru/terminyi-ipb/" title="Термины IPB (29/06/2008)">Термины IPB</a> (0)</li>
	<li><a href="http://pronets.ru/dizayn/" title="Дизайн (04/06/2009)">Дизайн</a> (0)</li>
	<li><a href="http://pronets.ru/klyuchevyie-slova-dlya-prodvizheniya-sayta/" title="Ключевые Слова Для Продвижения Сайта (19/04/2010)">Ключевые Слова Для Продвижения Сайта</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/dopolneniya-i-haki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Теги шаблонов, перезагрузка</title>
		<link>http://pronets.ru/tegi-shablonov-perezagruzka/</link>
		<comments>http://pronets.ru/tegi-shablonov-perezagruzka/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:43:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[блог]]></category>
		<category><![CDATA[Перезагрузка]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[Теги]]></category>
		<category><![CDATA[Теги шаблонов]]></category>
		<category><![CDATA[темы]]></category>
		<category><![CDATA[форум]]></category>
		<category><![CDATA[шаблоны]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=493</guid>
		<description><![CDATA[Некоторое время назад, я уже описывал нашу новую систему шаблонных тегов, которая будет в IP.Board 3.0.0. После некоторых замечаний по поводу синтаксиса и дальнейшей разработки самой системы, я почувствовал, что необходимо повторно осветить эту тему в блоге.

Система шаблонных тегов все так же основана на классах (расширять и реализовывать), которые работают как плагины. Плагины запускаются только [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторое время назад, я уже описывал нашу новую систему шаблонных тегов, которая будет в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3.0.0. После некоторых замечаний по поводу синтаксиса и дальнейшей разработки самой системы, я почувствовал, что необходимо повторно осветить эту тему в блоге.<br />
<span id="more-493"></span></p>
<p>Система шаблонных тегов все так же основана на классах (расширять и реализовывать), которые работают как плагины. Плагины запускаются только в случае если шаблоны закешированы, что делает систему очень быстрой и очень эффективной. Новый синтаксис тегов очень прост в использовании и для запоминания:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse plugin<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;название&quot;</span> option<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;значение&quot;</span> option2<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;значение2&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Теперь собственно к тегам, которые уже используются в Invison Power Board 3.0</p>
<p><strong>Expression / Выражение</strong></p>
<p>Данный тег служит для исполнения in-line PHP выражений, которые возвращают какое-то значение. Это может быть любая встроенная PHP функция или любая функция реализованная в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse expression<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;intval(<span style="color: #006699; font-weight: bold;">$data</span>['count'])&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>parse expression<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;IPSText::alphanumerical_clean( <span style="color: #006699; font-weight: bold;">$data</span>['value'] )&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Данный тег позволяет достаточно легко оформлять данные на лету и избавляет от навязчивого intval в коде, для гарантии правильного вывода значения, такого как 0, а не пустота!</p>
<p><strong>Template / Шаблон</strong></p>
<p>Данный тег используется для вставки любого другого шаблона <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board в текущий шаблон.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse template<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;pageLinks&quot;</span> group<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;skin_global&quot;</span> params<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$data</span>['start'], <span style="color: #006699; font-weight: bold;">$data</span>['end']&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Польза от такого тега совершенно очевидна. Вам больше не надо изменять PHP код для повторного использования шаблона в каком-то месте.</p>
<p><strong>Variable / Переменная</strong></p>
<p>Тег для создания переменной и изменения ее значения.</p>
<p>Создаем переменную с именем &#8216;className&#8217;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse variable<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;className&quot;</span> <span style="color: #b1b100;">default</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tdRow1&quot;</span> oncondition<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$data</span>['foo'] == 'bar'&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tdRow2&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Изменяем значение переменной:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse variable<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;className&quot;</span> oncondition<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$data</span>['foo'] == 'foo'&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tdRow3&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Используем переменную:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse variable<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;className&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>А теперь все тоже, но на практике:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse variable<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;className&quot;</span> <span style="color: #b1b100;">default</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;row1&quot;</span> oncondition<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$data</span>['banned'] === TRUE&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;rowBanned&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;</span>foreach loop<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$key</span> =&gt; <span style="color: #006699; font-weight: bold;">$data</span>&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{parse variable=&quot;</span>className<span style="color: #0000ff;">&quot;}&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>foreach<span style="color: #339933;">&gt;</span></pre></div></div>

<p><strong>Striping / Переключатель классов</strong></p>
<p>Когда Rikki работал над новым стилем <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board, он упомянул что было бы не плохо иметь такой тег, при помощи которого можно делать полоски, как у зебры (альтернативные цвета рядов при выводе списка форумов, тем и т.п.). И мы сделали тег striping.</p>
<p>Для установки тега:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse striping<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;someKey&quot;</span> classes<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tdrow1, tdrow2, tdrow3&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Для использования:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse striping<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;someKey&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>При преобразовании данного тега в код, он преобразуется в цикл по классам, с возможностью повторения цикла если это необходимо.</p>
<p>Ну и практический пример:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse striping<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;rows&quot;</span> classes<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;row1, row2&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;</span>foreach loop<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$data</span> as <span style="color: #006699; font-weight: bold;">$key</span> =&gt; <span style="color: #006699; font-weight: bold;">$value</span>&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>div <span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;{parse striping=&quot;</span>rows<span style="color: #0000ff;">&quot;}&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">&lt;/</span>div<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>foreach<span style="color: #339933;">&gt;</span></pre></div></div>

<p><strong>AddToHead / Добавить в Head</strong></p>
<p>Может быть трудно придерживаться строгих стандартов, имея дело с шаблонами разбитыми на куски. Часто вы ставите под угрозу исполнение стандартов, распределяя javascript и <a href="http://pronets.ru/tag/css/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with css">CSS</a> по всему телу документа.</p>
<p>Данный тег в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board позволит вам добавит контент в <head> документа быстро и просто:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse addtohead<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/js/someScript.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;javascript&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>parse addtohead<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;/css/someCSS.css&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;css&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>parse addtohead<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;&lt;script&gt;alert('boo')&lt;/script&gt;&quot;</span> type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;raw&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Date / Дата</strong></p>
<p>В предыдущих версиях Invison Power Board вся работа с датой осуществлялась внутри PHP кода, что делало формат дат в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> трудно изменяемыми, кроме тех случаев, которые были разрешены в АЦП.</p>
<p>Теперь <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board позволяет вам оформлять даты используя тег date в шаблонах.</p>
<p>Примеры:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse <span style="color: #990000;">date</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;now&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>parse <span style="color: #990000;">date</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;1765346750&quot;</span> relative<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;1&quot;</span> format<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;long&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>parse <span style="color: #990000;">date</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;-1 hour&quot;</span> format<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;manual{d, m, Y}&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong><a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> / Ссылки</strong></p>
<p><a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 позволяет легко оформлять <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> без использования специальных PHP переменных.</p>
<p>Примеры:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse url<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;showtopic=1&quot;</span> base<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;public&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>parse url<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;showforum=5&quot;</span> base<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;publicWithApp&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>parse url<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;photo1.jpg&quot;</span> base<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;upload&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Format Number / Оформление чисел</strong></p>
<p><a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 позволяет легко и просто иметь доступ к встроенной функции format_number.</p>
<p>Пример:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse format_number<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;123456&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Replacement / Замена</strong></p>
<p>Для развития нашей новой идеи тегов, мы решили отказаться от старого тега &#8216;macro&#8217; (<{MACRO_HERE}>) и заменить его новым тегом &#8216;replacements&#8217;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>parse replacement<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;macroKey&quot;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Конечно же реальная мощь данной шаблонной системы состоит в том, что вы сами можете создавать собственные обработчики тегов, скидывать их в директорию шаблонных тегов и незамедлительно начать пользоваться созданными тегами в шаблонах.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/perezagruzka/" title="Перезагрузка" rel="tag nofollow">Перезагрузка</a>, <a href="http://pronets.ru/tag/tegi/" title="Теги" rel="tag nofollow">Теги</a>, <a href="http://pronets.ru/tag/ipboard/" title="Форум IP.Board" rel="tag nofollow">Форум IP.Board</a>, <a href="http://pronets.ru/tag/temyi/" title="темы" rel="tag nofollow">темы</a>, <a href="http://pronets.ru/tag/ip/" title="IP" rel="tag nofollow">IP</a>, <a href="http://pronets.ru/tag/invision-power-board-3/" title="Invision Power Board 3" rel="tag nofollow">Invision Power Board 3</a>, <a href="http://pronets.ru/tag/shablonyi/" title="шаблоны" rel="tag nofollow">шаблоны</a>, <a href="http://pronets.ru/tag/css/" title="css" rel="tag nofollow">css</a>, <a href="http://pronets.ru/tag/ip-board/" title="IP.Board" rel="tag nofollow">IP.Board</a>, <a href="http://pronets.ru/tag/url/" title="URL" rel="tag nofollow">URL</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/sputnikovyiy-internet/" title="Спутниковый Интернет (15/06/2008)">Спутниковый Интернет</a> (0)</li>
	<li><a href="http://pronets.ru/rabota-so-ssyilkami/" title="Работа со ссылками (16/09/2008)">Работа со ссылками</a> (0)</li>
	<li><a href="http://pronets.ru/kartinki-dlya-podpisey-na-forumah/" title="Картинки для подписей на форумах (09/04/2009)">Картинки для подписей на форумах</a> (0)</li>
	<li><a href="http://pronets.ru/problemyi-servera/" title="Проблемы сервера (30/06/2008)">Проблемы сервера</a> (0)</li>
	<li><a href="http://pronets.ru/reviziya-sistemyi-bbcode/" title="Ревизия системы BBCode (04/06/2009)">Ревизия системы BBCode</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/tegi-shablonov-perezagruzka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Приоткрывая завесу над ipsRegistry</title>
		<link>http://pronets.ru/priotkryivaya-zavesu-nad-ipsregistry/</link>
		<comments>http://pronets.ru/priotkryivaya-zavesu-nad-ipsregistry/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:35:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[ipsRegistry]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[скрипты]]></category>
		<category><![CDATA[создание]]></category>
		<category><![CDATA[форум]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=491</guid>
		<description><![CDATA[В предыдущей записи о новом каркасе IP.Board 3.0, я упоминал о неком компоненте лежащем в основе базы нового каркаса называемом &#8216;ipsRegistry&#8217;. Данная заметка раскроет больше деталей он нем и будет интересна для авторов модификаций.

Обзор
IP.Board, как и любое сложное приложение, использует в работе базовые данные, такие как настройки, сессии и входные данные ($_GET, $_POST и т.п.). [...]]]></description>
			<content:encoded><![CDATA[<p>В предыдущей записи о новом каркасе <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3.0, я упоминал о неком компоненте лежащем в основе базы нового каркаса называемом &#8216;ipsRegistry&#8217;. Данная заметка раскроет больше деталей он нем и будет интересна для авторов модификаций.<br />
<span id="more-491"></span></p>
<p><strong>Обзор</strong></p>
<p><a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board, как и любое сложное приложение, использует в работе базовые данные, такие как настройки, сессии и входные данные ($_GET, $_POST и т.п.). Так же необходимы соединение с базой и доступ к глобальным объектам, таким как данные кеша. Согласитесь, что было бы не вероятно расточительно в каждом файле и классе создавать соединение с базой, загружать данные из кеша, проверять сессию и получать какие-либо настройки. А ведь подобные действия в Invison Power Board происходят по нескольку раз.</p>
<p>Понятно что есть необходимость в способе, который бы единожды инициализировал все данные и предоставлял бы доступ к ним из любой части приложения. Именно для этого и предназначен ipsRegistry. В предыдущих версиях <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board роль реестра выполнялась объектом ipsclass, но он быстро лишался четких границ при добавлении все большего и большего числа данных к нему. Он был больше глобальной переменной, нежели чем-то еще. Новый регистр составлен из четко определенных объектов. Также в предыдущих версиях инициализация настроек, кешей, входных данных, сессий и прочего было разбросано по разным классам и файлам. В новой версии точка инициализации одна. Эта инициализация происходит когда вызывается метод init(). Тем самым это позволяет достаточно просто использовать регистр IPS в собственных скриптах и модификациях. Тогда как ранее вам необходимо было копировать чуть ли не половину index.php. Сейчас ваши скрипты могут быть много проще:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'conf_data.php'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'classes/base/ipsRegistry.php'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Вызываем init, который загружает входные данные, кеши, настройки, создает обработчик для БД, авторизует и загружает пользователя */</span>
<span style="color: #000088;">$registry</span> <span style="color: #339933;">=</span> ipsRegistry<span style="color: #339933;">::</span><span style="color: #004000;">instance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">print</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getField</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'foo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">DB</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">do_update</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'table'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'foo'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'bar'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">print</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">member</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'member_id'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> ? <span style="color: #0000ff;">'Привет, '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">member</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'members_display_name'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'Зашли как гость'</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Получение входных данных из <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> и форм</strong></p>
<p>Ключевой частью инициализации <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board была обработка &#8220;грязных&#8221; данных и создание массива с &#8220;очищенными&#8221; данными. Это было жизненно важно для общей безопасности форумов. В <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3.0 для этого выделен объект реестра &#8216;request&#8217;, который содержит все функции необходимые для инициализации и обработки данных (parse_key, parse_value и т.п.) Все они доступны или через $this->request->getField(&#8217;foo&#8217;) или через $this->request['foo']. Это является эффективной заменой $this->ipsclass->input['foo'];</p>
<p><strong>Кешированные данные</strong></p>
<p>Большое количество улучшений в кеширующем механизме, но их мы опишем в более поздних заметках, потому как речь сейчас идет о реестре. Так вот, кеш объект реестра просто возвращает кеш, когда происходит запрос через $this->registry->cache()->getCache(&#8217;forums&#8217;); Сам же кеш загружается и подготавливается для использования во время инициализации, так что вам не надо в ручную делать это.</p>
<p><strong>База данных</strong></p>
<p>Опять же замечу, что большая часть кода работы с базой данных была оптимизирована (рефакторинг), но это заслуживает отдельного рассказа. А пока возвращаясь к реестру скажу, что основной метод для работы с базой &#8211; это getDB. Метод возвращает объект DB, который создается во время инициализации через setDB(). Инициализация происходит прозрачно, при подключении файла ( ipsController.php ) и вызове init(). Так же вы можете создать несколько подключений, например:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">DB</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setDB</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'mysql'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'newConnection'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user@localhost.com'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'localhost'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">DB</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'newConnection'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">build_and_exec_query</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'select'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'*'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'from'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'table'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Настройки</strong></p>
<p>Как и все выше пречисленное кеш настроек загружается и подготавливается к использованию во время инициализации. В реестре объект настроек просто возвращает запрашиваемую настройку (ее значение), вызов происходит так $this->settings->getSetting(&#8217;foo&#8217;) или так $this->settings['foo'].</p>
<p><strong>Пользовательская информация</strong></p>
<p>В предыдущих версиях сбор пользовательской информации был рассеян по всему ipsclass. Новый регистр <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board все это централизует. Этот объект получает <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a> пользователя, браузер и операционную систему и передает все это member класс. Так же он проверяет сессию (через cookie или из <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>), загружает пользовательскую сессию и создает массив пользовательских прав. Все это происходит во время инициализации.</p>
<p>Я надеюсь, что данная заметка даст вам некоторое понимание структуры реестра IPS, а также нововведений, которые он приносит не только в сам <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a>, но и для разработчиков модификаций, которые найдут его достаточно полезным за счет того, что он автоматически создает множество необходимых данных, тем самым экономя их время разработки. Если вы почувствуете, что часть предоставленной информации вам не нужна, то вы сможете унаследовать ipsRegistry и заменить &#8216;protected&#8217; методы, чтобы убрать их из инициализации.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/skriptyi/" title="скрипты" rel="tag nofollow">скрипты</a>, <a href="http://pronets.ru/tag/forum/" title="форум" rel="tag nofollow">форум</a>, <a href="http://pronets.ru/tag/ipsregistry/" title="ipsRegistry" rel="tag nofollow">ipsRegistry</a>, <a href="http://pronets.ru/tag/ip-board/" title="IP.Board" rel="tag nofollow">IP.Board</a>, <a href="http://pronets.ru/tag/invision-power-board/" title="Invision Power Board" rel="tag nofollow">Invision Power Board</a>, <a href="http://pronets.ru/tag/url/" title="URL" rel="tag nofollow">URL</a>, <a href="http://pronets.ru/tag/ipboard-3/" title="IP.Board 3" rel="tag nofollow">IP.Board 3</a>, <a href="http://pronets.ru/tag/ip/" title="IP" rel="tag nofollow">IP</a>, <a href="http://pronets.ru/tag/ipb/" title="IPB" rel="tag nofollow">IPB</a>, <a href="http://pronets.ru/tag/sozdanie/" title="создание" rel="tag nofollow">создание</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/ip-board-3/" title="Скрины IP. Board 3 (08/12/2008)">Скрины IP. Board 3</a> (0)</li>
	<li><a href="http://pronets.ru/gid-po-css-ip-board-3-0-x/" title="Гид по CSS IP.Board 3.0.x (08/08/2009)">Гид по CSS IP.Board 3.0.x</a> (0)</li>
	<li><a href="http://pronets.ru/kartinki-dlya-podpisey-na-forumah/" title="Картинки для подписей на форумах (09/04/2009)">Картинки для подписей на форумах</a> (0)</li>
	<li><a href="http://pronets.ru/takoy-novyiy-modul-vyivoda/" title="Такой новый модуль вывода (04/06/2009)">Такой новый модуль вывода</a> (0)</li>
	<li><a href="http://pronets.ru/vvedenie-v-skriptyi/" title="Введение в скрипты (29/12/2009)">Введение в скрипты</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/priotkryivaya-zavesu-nad-ipsregistry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ревизия системы BBCode</title>
		<link>http://pronets.ru/reviziya-sistemyi-bbcode/</link>
		<comments>http://pronets.ru/reviziya-sistemyi-bbcode/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:24:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[BBCode]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[блог]]></category>
		<category><![CDATA[блок]]></category>
		<category><![CDATA[добавить]]></category>
		<category><![CDATA[модификации]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[Ревизия]]></category>
		<category><![CDATA[Ревизия системы BBCode]]></category>
		<category><![CDATA[Система]]></category>
		<category><![CDATA[темы]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=484</guid>
		<description><![CDATA[BBCode &#8211; это базовая часть вашего форума. Понимая это, мы проделали тяжелую работу по ревизии и полному переписыванию всей системы bbcode в IP.Board 3.0. Мы думаем, что вам это понравится.

Отличия от IP.Board 2.x
 
Есть некоторые основные различия в системе BBCode, вводимой в IP.Board 3, которые Вы можете заметить сразу же. Для разгона &#8211; каждый BBCode настраивается [...]]]></description>
			<content:encoded><![CDATA[<p>BBCode &#8211; это базовая часть вашего форума. Понимая это, мы проделали тяжелую работу по ревизии и полному переписыванию всей системы bbcode в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3.0. Мы думаем, что вам это понравится.</p>
<p><span id="more-484"></span></p>
<h4>Отличия от <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 2.x</h4>
<p> </p>
<p>Есть некоторые основные различия в системе BBCode, вводимой в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3, которые Вы можете заметить сразу же. Для разгона &#8211; <span style="text-decoration: underline;">каждый</span> BBCode настраивается через админ-центр. Это означает, что если вам необходимо добавить &#8220;rel=&#8217;nofollow&#8217;&#8221; ко всем <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>, вы сможете сделать это без редактирования файлов. Если вы хотите изменить получающийся HTML для тега, вы сможете это сделать прямо в админцентре. Внутренний обработчик bbcode воспринимает каждый тег как пользовательский и обрабатывает их совершенно одинаково.</p>
<p>Дополнительно, мы изменили HTML код, генерируемый bbcode таким образом, чтобы он был как можно больше XHTML совместимым. Были добавлены Alt атрибуты для img тегов. Мы изменили обработку смайликов, так что img теги смайликов содержат alt с кодом смайлика, также мы полностью удалили не стандартный атрибут emoid. Цитаты теперь должным образом используют HTML тег blockquote (в дальнейшем мы планируем использовать HTML тег cite, если вместе с цитатой вы добавляете ссылку и имя автора цитаты). Для текста выделенного жирным теперь будет использоваться HTML тег strong, для курсива &#8211; em. Фактически весь HTML код для bbcode был переписан с целью сделать его более семантичным и для того что бы сделать HTML код генерируемый <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board, соответствующим современным стандартам.</p>
<p>И наконец, ревизия коснется и тегов отвечающих за оформление кода (code-syntax boxes), таких как HTML и SQL bbcode, мы сделаем их более гибкими что позволит нам (и конечно же вам!) легко добавлять новые языки программирования. В будущем мы подробнее опишем данное изменение.</p>
<p> </p>
<h4>Новые возможности системы BBCode.</h4>
<p> </p>
<p>Я уверен, что это то, что вы так хотели узнать. Хорошо, поехали&#8230;</p>
<ul>
<li>Синонимы (Алиасы, Aliases): теперь bbcode могут иметь синонимы, так сразу несколько тегов смогут запускать один и тот же bbcode. Примеры? Из существующих, &#8220;code&#8221; и &#8220;codebox&#8221;. Аналогично &#8220;media&#8221;, &#8220;blogmedia&#8221;, &#8220;flash&#8221;, и &#8220;youtube&#8221; так же будут одними тем же bbcode. (О медиа тегах мы расскажем через минуту )</li>
<li>Одиночные теги: вы хотели использовать [hr] (горизонтальная линия)? Теперь можете.</li>
<li>Не обязательные параметры тега: теперь параметры могут опускаться и у ваших bbcode. Как это работает? Вспомните <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">url</a> тег, вы можете записать ссылку как параметр к тегу, а содержимое будет подставлено как название ссылки, или же опустить параметр, тогда содержимое станет ссылкой.</li>
<li>Запрет использования одних тегов внутри других. Классический пример запрет использования смайликов и других bbcode внутри code bbcode.</li>
<li>Запуск PHP обработчика: вам необходимо немного больше логики при обработке bbcode (вы хотите немного уличной магии?)? Теперь вы сможете использовать bbcode плагины для этого. Плагины имеют определенный интерфейс потому их разработка не будет проблематичной. Более подробная информация о создании плагинов будет доступна ближе к выходу <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 3.0. Некоторые наши bbcode уже используют плагины, так что это должно помочь разработчикам при разработке и использовании плагинов. Таким образом вам больше не надо будет изменять существующие файлы системы для добавления новых bbcode.</li>
<li>Управление правами групп на использование определенных тегов: менеджер bbcode теперь имеет поле, в котором можно указать, какие группы (так же поддерживаются второстепенные группы) смогут использовать данный тег. Так что, если вы хотите, чтобы только администраторы могли создавать таблицы с использованием тега [table], вы сможете это сделать.</li>
<li>Управление местами где может быть использован bbcode: хотите запретить использовать вставку картинок в подпись и оставить возможность вставки только в сообщениях? Теперь вы сможете настроить это прямо в менеджере bbcode в админцентре. Данная опция доступна и для модификации, таким образом разработчики смогут создать возможность настройки тегов которые можно будет использовать в их приложениях.</li>
</ul>
<p> </p>
<h4>Новые &#8220;стандартные&#8221; BBCode в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3</h4>
<p> </p>
<p>Я использовал определение &#8220;стандартные&#8221;, хотя теперь все в АЦП настраиваемо. В дополнении ко всем тем bbcode которые уже были в <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> 2.x, будут доступны несколько новых:</p>
<ul>
<li>&#8220;member&#8221;. Использование: [member=GiV]. Данный тег является одиночным bbcode тегом, которые принимает один параметр &#8211; имя пользователя. При обработке данного тега система создаст ссылку на профиль пользователя и тег будет преобразован в &#8220;&lt;a href=&#8217;ссылка на профиль&#8217;&gt;имя пользователя&lt;/a&gt;&#8221;</li>
<li>&#8220;hr&#8221;. Использование: [hr]. Очень простой bbcode тег, который будет преобразован в горизонтальный разделитель.</li>
<li>&#8220;xml&#8221; и &#8220;php&#8221;. Использование: [xml]XML код[/xml] или [php]$phpCode = 1;[/php]. Теги будут преобразованы во вставки блоков кода с подсветкой синтаксиса, аналогично существующим тегам SQL и HTML.</li>
<li>&#8220;media&#8221;. Использование: [media]http://youtube.com/videolink[/media]. Да это то, чего вы все так ждали. В блогах мы уже использовали такой тег, так что мы пошли дальше и встроили его в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board. Вы можете настраивать совпадения и замены для media тега ( те кто используют <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Blog 1.4 знают о чем я ), это позволит вам при желании подключать новые медиа сервисы. Так же старый bbcode [flash] теперь работает через media тег, так же доступны параметры высоты и ширины для ролика.</li>
</ul>
<p> </p>
<h4>Унылые и скучные технические подробности</h4>
<p> </p>
<p>Для тех из вас, кто заинтересован в программной реализации новой системы скажу, что мы полностью переписали парсер bbcode с нуля. Это должно быть гарантией того, что bbcode может быть корректно обработан, когда пользователь осуществляет правки контента. Во-первых, мы вернулись к надлежащему вызову pre_db_parse перед сохранением контента в базу, и pre_display_parse перед его выводом. Это должно быть гарантией того что bbcode может быть корректно обработан когда пользователь осуществляет правки контента.</p>
<p>Главное изменение в том, как отформатированный текст обрабатывается &#8211; а никак он не обрабатывается! Это означает то, что мы теперь не осуществляем обратные преобразования из распарсенного bbcode, тем самым почти избавляясь от возникновения тех глюков, которые были связанны с этим процессом.</p>
<p>Другим плюсом данного подхода является то, что перестраивать посты вам будет необходимо только при обновлении до <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3.0, а потом уже больше никогда. В дополнении к этому мы намереваемся полностью обновить наш инструмент обновления сообщений, тот который command-line, и планируем добавить задачу для планировщика, которая автоматически обновит сообщения за вас в любой удобный для вас момент. Более подробно об этом мы планируем сообщить ближе к выпуску 3.0.</p>
<p>Некоторые из вас уже задаются вопросом о росте расхода ресурсов из-за постоянного парсинга сообщении при выводе. В нашем новом парсере bbcode мы почти полностью избавились от регулярных выражений. Регулярные выражения позволяют вам задавать &#8220;паттерн&#8221; и отыскивать все совпадения с этим &#8220;паттерном&#8221; в блоке текста, это достаточно расточительный, но очень эффективный инструмент. В <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 2.x использовался именно он (так же как и в большинстве существующих bbcode парсеров). Для <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3.0 мы говорим об использовании подхода с использованием лексем. Мы используем несколько быстрых встроенных PHP функций (таких как strpos и substr_replace) вместо массивных регулярных выражений, что делает процесс парсинга bbcode намного быстрее и менее прожорливее. Позднее мы постараемся предоставить результаты профилирования данного метода.Так же мы полностью переписали механизм переноса слов. Теперь он не нарушает HTML, HTML-entity и multibyte&#8230; три огромных проблем, которые мы часто видели при работе функции переноса в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 2.x.</p>
<p>В целом, с помощью новой системы мы сгладили последствия различных ошибок, которые мы получали, и система должна получиться не только более легко используемой, но и намного более надежной и быстрой.</p>
<p> </p>
<h4>Итог</h4>
<p> </p>
<p>Мы надеемся что вам понравятся изменения и мы надеемся, что обновления, которых многие из вас ждали долгое время, удовлетворят ваши потребности и в обозримом будущем.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/ipb-3/" title="IPB 3" rel="tag nofollow">IPB 3</a>, <a href="http://pronets.ru/tag/ip/" title="IP" rel="tag nofollow">IP</a>, <a href="http://pronets.ru/tag/ipb/" title="IPB" rel="tag nofollow">IPB</a>, <a href="http://pronets.ru/tag/ipboard-3/" title="IP.Board 3" rel="tag nofollow">IP.Board 3</a>, <a href="http://pronets.ru/tag/blog/" title="блог" rel="tag nofollow">блог</a>, <a href="http://pronets.ru/tag/modifikatsii/" title="модификации" rel="tag nofollow">модификации</a>, <a href="http://pronets.ru/tag/ipboard/" title="Форум IP.Board" rel="tag nofollow">Форум IP.Board</a>, <a href="http://pronets.ru/tag/invision-power-board-3/" title="Invision Power Board 3" rel="tag nofollow">Invision Power Board 3</a>, <a href="http://pronets.ru/tag/reviziya-sistemyi-bbcode/" title="Ревизия системы BBCode" rel="tag nofollow">Ревизия системы BBCode</a>, <a href="http://pronets.ru/tag/ip-board/" title="IP.Board" rel="tag nofollow">IP.Board</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/krossbrauzernaya-podsvetka-schetchikov/" title="Кроссбраузерная подсветка счетчиков (16/06/2008)">Кроссбраузерная подсветка счетчиков</a> (0)</li>
	<li><a href="http://pronets.ru/vvedenie-v-razrabotku/" title="Введение в разработку (03/06/2009)">Введение в разработку</a> (0)</li>
	<li><a href="http://pronets.ru/poleznyie-servisyi/" title="Полезные сервисы (17/09/2008)">Полезные сервисы</a> (0)</li>
	<li><a href="http://pronets.ru/banners/" title="Баннеры Нашего Сайта (25/06/2008)">Баннеры Нашего Сайта</a> (0)</li>
	<li><a href="http://pronets.ru/downloads/" title="Скины, Моды, Плагины для IPB, Wordpress, IP.Board, Invision Power Board, php-Fusion (11/06/2008)">Скины, Моды, Плагины для IPB, Wordpress, IP.Board, Invision Power Board, php-Fusion</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/reviziya-sistemyi-bbcode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Расширяя механизмы авторизации</title>
		<link>http://pronets.ru/rasshiryaya-mehanizmyi-avtorizatsii/</link>
		<comments>http://pronets.ru/rasshiryaya-mehanizmyi-avtorizatsii/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:12:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Авторизация]]></category>
		<category><![CDATA[Блог WordPress]]></category>
		<category><![CDATA[Логин]]></category>
		<category><![CDATA[Механизмы]]></category>
		<category><![CDATA[Механизмы авторизации]]></category>
		<category><![CDATA[Сайт]]></category>
		<category><![CDATA[стили]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=472</guid>
		<description><![CDATA[Во второй версии IP.Board был добавлен менеджер методов авторизации. При помощи этого инструмента вы могли подключать к IPB внешние таблицы пользователей, LDAP и IP.Converge. Вы так же могли создавать собственные методы и подключать форум к любому внешнему реестру (например, OpenID). Методы авторизации использовались нами и при конвертации &#8211; это позволяло системе принимать старые пароли, которые [...]]]></description>
			<content:encoded><![CDATA[<p>Во второй версии <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board был добавлен менеджер методов авторизации. При помощи этого инструмента вы могли подключать к <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> внешние таблицы пользователей, LDAP и <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Converge. Вы так же могли создавать собственные методы и подключать форум к любому внешнему реестру (например, OpenID). Методы авторизации использовались нами и при конвертации &#8211; это позволяло системе принимать старые пароли, которые были созданы еще на предыдущей форумной системе.</p>
<p><span id="more-472"></span></p>
<h4>В <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 менеджер методов авторизации получил еще больше возможностей.</h4>
<p> </p>
<p>Форма авторизации теперь находится в одном шаблоне. Это сделано для того, чтобы быть уверенным, что форма авторизации во всех частях приложения выглядит одинаково. Теперь при изменении формы вам не надо будет вносить изменения в несколько шаблонов как это было в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 2. Так же форма авторизации сделана &#8220;интеллектуальной&#8221;. Так как для авторизации в системе может требоваться как имя пользователя, так и email то мы решили максимально упростить форму. Теперь форма будет запрашивать только одно поле &#8220;имя для входа&#8221; (&#8221;sign in name&#8221;), а <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> уже сам определит отправляете ли вы email адрес или логин.</p>
<p>Так же мы упростили менеджер, убрав разделение методов на &#8220;удаленный&#8221; (&#8221;passthrough&#8221;) и &#8220;совместный&#8221; (&#8221;onfail&#8221;). Это стало возможным благодаря тому, что теперь появилась возможность создавать цепочки методов. Например, вы можете попробовать идентифицировать пользователя по локальной базе форума (если аккаунт существует) и в случае провала проверки загрузить пользователя из внешней базы. Или вы можете позволить пользователю авторизоваться с использованием одного из нескольких подключенных реестров пользователей. В админцентре методы авторизации будут располагаться в том порядке, в котором будет строиться цепочка, и вы сможете изменить их порядок в цепи простым перетаскиванием метода на нужное место.</p>
<p>Некоторые методы авторизации требовали дополнительной информации для работы. Например, метод для работы с LDAP, <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> необходимо знать дополнительные данные о имени сервера LDAP, имени пользователя и пароле для доступа к LDAP. Во второй версии <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board эта информация вводилась в конфигурационном PHP файле. В третьей версии данную информацию можно будет ввести (и в любое время изменить) напрямую в АЦ.</p>
<p>Еще одной особенностью нового менеджера стала работа с локальным реестром пользователей. В <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> 2 когда пользователь добавлялся в локальный реестр после удачной аутентификации через внешний реестр, пользователю необходимо было заполнить дополнительные поля: отображаемое имя пользователя и email адрес, даже если эта информация уже хранилась в удаленном реестре. В <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 вы можете получить ЛЮБЫЕ данные из внешнего реестра, тем самым освободив пользователя от необходимости дозаполнения форм. А логин и email теперь сохраняются автоматически, делая авторизацию однородной (без переходов к дополнительным формам).</p>
<p><a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Converge также подвергся незначительному обновлению &#8211; если вы используете <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Converge на вашем форуме, то пользователи (которые уже заходили на форум под своим аккаунтом) теперь смогут заходить по их логину на форуме. <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> сам найдет email адрес пользователя по его логину и предаст его в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Converge для аутентификации, при этом пользователи даже не будут знать об этом.</p>
<p>Ну и наконец, авторизация с использованием протокола OpenID в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board 3 станет стандартным методом авторизации. Если вы не знакомы с OpenID, то вам будет полезно знать, что это развивающийся протокол, позволяющий вам управлять установлением подлинности собственного логина. Вы отправляете <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> сайта, который предоставляет сервис по хранению вашей OpenID записи, так называемый OpenID провайдер, (например, Yahoo, Wordpress, Flickr, и AOL), затем переходите на этот <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> и подтверждаете, что запрос авторизации действительно ваш, при этом пройдя авторизацию на стороне провайдера. После того как информация о правильности аутентификации придет на форум, вы будете уже автоматически идентифицированы им. Более того, если вы разрешите отправить на форум логин и email, то форум создаст для вас полнофункциональный локальный аккаунт. <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> будет поддерживать первую и вторую версию протокола OpenID с расширениями Simple Registration, Attribute Exchange и PAPE. Для реализации OpenID мы будем использовать PHP OpenID библиотеки от JanRain.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/ipb/" title="IPB" rel="tag nofollow">IPB</a>, <a href="http://pronets.ru/tag/ipboard/" title="Форум IP.Board" rel="tag nofollow">Форум IP.Board</a>, <a href="http://pronets.ru/tag/wordpress/" title="Блог WordPress" rel="tag nofollow">Блог WordPress</a>, <a href="http://pronets.ru/tag/invision-power-board-3/" title="Invision Power Board 3" rel="tag nofollow">Invision Power Board 3</a>, <a href="http://pronets.ru/tag/stili/" title="стили" rel="tag nofollow">стили</a>, <a href="http://pronets.ru/tag/ip-board/" title="IP.Board" rel="tag nofollow">IP.Board</a>, <a href="http://pronets.ru/tag/mehanizmyi-avtorizatsii/" title="Механизмы авторизации" rel="tag nofollow">Механизмы авторизации</a>, <a href="http://pronets.ru/tag/ipb-3/" title="IPB 3" rel="tag nofollow">IPB 3</a>, <a href="http://pronets.ru/tag/login/" title="Логин" rel="tag nofollow">Логин</a>, <a href="http://pronets.ru/tag/sayt/" title="Сайт" rel="tag nofollow">Сайт</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/perenos-sayta-s-lokalnoy-mashinyi/" title="Перенос сайта с локальной машины (16/06/2008)">Перенос сайта с локальной машины</a> (0)</li>
	<li><a href="http://pronets.ru/obnovlenie-wordpress/" title="Обновление WordPress (17/08/2009)">Обновление WordPress</a> (0)</li>
	<li><a href="http://pronets.ru/ispolzovanie-smaylov-pri-zamene-netsenzurnyih-slov/" title="Использование смайлов при замене нецензурных слов (14/10/2008)">Использование смайлов при замене нецензурных слов</a> (0)</li>
	<li><a href="http://pronets.ru/urovni-domennyih-imyon/" title="Уровни доменных имён (15/06/2008)">Уровни доменных имён</a> (0)</li>
	<li><a href="http://pronets.ru/raskrutka-sayta-v-yandeks-vneshnimi-metodami/" title="Раскрутка сайта в Яндекс внешними методами (24/05/2010)">Раскрутка сайта в Яндекс внешними методами</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/rasshiryaya-mehanizmyi-avtorizatsii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Делая шаблоны проще</title>
		<link>http://pronets.ru/delaya-shablonyi-prosche/</link>
		<comments>http://pronets.ru/delaya-shablonyi-prosche/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:09:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[блок]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[темы]]></category>
		<category><![CDATA[шаблоны]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=469</guid>
		<description><![CDATA[HTML логика была особенностью Invision Power Board в течение довольно продолжительного времени. Хотя мы и не применяли обширно тег &#8220;&#8221; для сохранения обратной совместимости со старыми версиями, логика с использованием   применялась достаточно удачно. Теперь, когда мы с чистого листа создаем версию 3.0, мы можем сделать реальные позитивные изменения в системе шаблонов.

Invision Power Board [...]]]></description>
			<content:encoded><![CDATA[<p>HTML логика была особенностью <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> в течение довольно продолжительного времени. Хотя мы и не применяли обширно тег &#8220;<foreach>&#8221; для сохранения обратной совместимости со старыми версиями, логика с использованием <if> <else /> применялась достаточно удачно. Теперь, когда мы с чистого листа создаем версию 3.0, мы можем сделать реальные позитивные изменения в системе шаблонов.<br />
<span id="more-469"></span></p>
<p><a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> 3.0 продолжит использовать существующую HTML логику и добавит новые возможности. Эти новшества позволят существенно изменять внешний вид без изменения PHP кода. Там, где это возможно, &#8220;вид&#8221; (например, список форумов, тем, просмотр темы) имеет один шаблон. В предыдущей версии для создания подобного &#8220;вида&#8221; объединялось несколько шаблонов (до 30!). Это означало, что некоторые элементы интерфейса были жестко закреплены за определенной позицией и не могли быть перенесены в другое место страницы. Например, на главной странице не было возможности перенести статистику выше списка форумов. Аналогичным образом было невозможно перенести активных пользователей ниже статистики. (здесь не имеется ввиду возможность переноса без изменения в коде)</p>
<p>Теперь все это возможно. Вы можете переносить любую сущность в любую позицию в пределах &#8220;вида&#8221; без правки PHP файлов. Это откроет новые перспективы для творчества и позволит создавать действительно уникальные шаблоны.</p>
<p>Еще одним шагом вперед для <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> 3 является возможность использования в шаблонах логики отображения. Естественно, мы всегда можем использовать</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>if<span style="color: #339933;">&gt;</span></pre></div></div>

<p> и</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>else <span style="color: #339933;">/&gt;</span></pre></div></div>

<p>, но теперь можно использовать следующие стандартные теги.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>strong<span style="color: #339933;">&gt;</span>Тег Date<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Примеры:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #339933;">%</span><span style="color: #990000;">date</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;now&quot;</span><span style="color: #339933;">|</span>format<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;long&quot;</span><span style="color: #339933;">|</span>relative<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;false&quot;</span><span style="color: #339933;">%</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span><span style="color: #339933;">%</span><span style="color: #990000;">date</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;1210012321&quot;</span><span style="color: #339933;">|</span>format<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;manual{d m Y}&quot;</span><span style="color: #339933;">%</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span><span style="color: #339933;">%</span><span style="color: #990000;">date</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;-1 day&quot;</span><span style="color: #339933;">|</span>format<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;long&quot;</span><span style="color: #339933;">%</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Вы можете точно задавать формат даты, требуемый в данном случае. Тег работает как с UNIX &#8216;timestamp&#8217;, так и с человекопонятным представлением вида &#8216;now&#8217;, &#8216;-1 day&#8217;, &#8216;tomorrow&#8217;, и подобными. Формат может быть задан как предустановленными форматами даты в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> (ong, short, joined), так и PHP форматом.</p>
<p><strong>Тег Parse</strong></p>
<p>Примеры:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>parse expression<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;sprintf( &quot;</span><span style="color: #cc66cc;">14</span><span style="color: #0000ff;">&quot;, &quot;</span>There are <span style="color: #339933;">%</span>s apples in the bag<span style="color: #0000ff;">&quot; )&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>parse expression<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;substr( <span style="color: #006699; font-weight: bold;">$data</span>['name'], 0, 10 )&quot;</span> <span style="color: #339933;">/&gt;</span></pre></div></div>

<p>Данный тег позволяет создавать немедленный синтаксический анализ с использованием PHP кода. Тег заменяется значением, возвращенным PHP после выполнения параметра expression тега.</p>
<p><strong>Тег <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a></strong></p>
<p>Примеры:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900;">&#123;</span><span style="color: #339933;">%</span>url<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;foo=1&amp;bar=2&quot;</span><span style="color: #339933;">|</span>label<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Click Me&quot;</span><span style="color: #339933;">|</span>base<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;public&quot;</span><span style="color: #339933;">|</span>id<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;myLink&quot;</span><span style="color: #339933;">|</span>class<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;linkCSS&quot;</span><span style="color: #339933;">|</span>onclick<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;this.function()&quot;</span><span style="color: #339933;">%</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span><span style="color: #339933;">%</span>url<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;foo=1&amp;bar=2&quot;</span><span style="color: #339933;">|</span>base<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;public&quot;</span><span style="color: #339933;">%</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>Первый пример фактически создаст полный</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>a href <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;...&gt; ... &lt;/a&gt;</span></pre></div></div>

<p>кусок HTML, тогда как второй пример возвратит только форматированный <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>. Целью создания такого тега было предотвращение hardcoded (жестко прописанных) <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> в шаблонах. В <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 2.3 использовались записи в шаблонах вида</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">'{$this-&gt;ipsclass-&gt;base_url}&amp;act=login'</span><span style="color: #339933;">&gt;</span>Log In<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span></pre></div></div>

<p>В новой версии данная ссылка уже будет выглядеть так:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>a href<span style="color: #339933;">=</span><span style="color: #0000ff;">'{%url=&quot;act=login&quot;|base=&quot;public&quot;%}'</span><span style="color: #339933;">&gt;</span>Log In<span style="color: #339933;">&lt;/</span>a<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Но, конечно, основное преимущество данного подхода — это возможность применения определенного формата к <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>. Таким образом, функция formatURL(), возвращающая форматированный <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>, может создавать дружественные <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>&#8217;ы (ЧПУ), если данная опция включена в АЦ, или создавать обычные <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a>, если опция отключена.</p>
<p><strong>Тег Variable</strong></p>
<p>Пример:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>variable <span style="color: #990000;">key</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tdColor&quot;</span> <span style="color: #b1b100;">default</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;blue&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>variable <span style="color: #990000;">key</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tdColor&quot;</span> oncondition<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$foo</span> == &quot;</span>green<span style="color: #0000ff;">&quot;&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;green&quot;</span> <span style="color: #339933;">/&gt;</span>
<span style="color: #339933;">&lt;</span>variable <span style="color: #990000;">key</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;tdColor&quot;</span> oncondition<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$foo</span> == &quot;</span>black<span style="color: #0000ff;">&quot;&quot;</span> value<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;black&quot;</span> <span style="color: #339933;">/&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">'color:&lt;variable=&quot;tdColor&quot; /&gt;'</span><span style="color: #339933;">&gt;</span>Hello World<span style="color: #339933;">!&lt;/</span>span<span style="color: #339933;">&gt;</span></pre></div></div>

<p>В данном примере при помощи тега variable вводится переменная tdColor со значением по-умолчанию &#8220;blue&#8221;. Значение переменной tdColor так же зависит от значения переменной $foo, которая является внешней. Таким образом, если переменная $foo будет иметь значение &#8220;green&#8221;, то весь этот блок кода в результате будет заменен шаблонизатором на</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">'color:green'</span><span style="color: #339933;">&gt;</span>Hello World<span style="color: #339933;">!&lt;/</span>span<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Этот тег позволяет вводить переменные в шаблон без изменения PHP кода. Тег будет широко использоваться в повторяющихся блоках, в которых необходимо чередование цветов (например, при выводе списка тем, сообщений).</p>
<p><strong>Пользовательские теги.</strong></p>
<p>Теги шаблонизатора будут выделены в отдельные плагины, которые и будут заниматься реализацией поведения тега. Таким образом, вы сможете изменять поведение существующих тегов, а так же создавать свои.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/invision-power-board/" title="Invision Power Board" rel="tag nofollow">Invision Power Board</a>, <a href="http://pronets.ru/tag/ipb/" title="IPB" rel="tag nofollow">IPB</a>, <a href="http://pronets.ru/tag/plagin/" title="плагин" rel="tag nofollow">плагин</a>, <a href="http://pronets.ru/tag/invision-power-board-3/" title="Invision Power Board 3" rel="tag nofollow">Invision Power Board 3</a>, <a href="http://pronets.ru/tag/ipboard-3/" title="IP.Board 3" rel="tag nofollow">IP.Board 3</a>, <a href="http://pronets.ru/tag/css/" title="css" rel="tag nofollow">css</a>, <a href="http://pronets.ru/tag/ipb-3/" title="IPB 3" rel="tag nofollow">IPB 3</a>, <a href="http://pronets.ru/tag/temyi/" title="темы" rel="tag nofollow">темы</a>, <a href="http://pronets.ru/tag/ipboard/" title="Форум IP.Board" rel="tag nofollow">Форум IP.Board</a>, <a href="http://pronets.ru/tag/blok/" title="блок" rel="tag nofollow">блок</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/css_classic/" title="Гид по CSS (Classic Skin) (25/07/2008)">Гид по CSS (Classic Skin)</a> (0)</li>
	<li><a href="http://pronets.ru/belaya-stranitsa/" title="Белая страница (13/06/2008)">Белая страница</a> (0)</li>
	<li><a href="http://pronets.ru/dizayn/" title="Дизайн (04/06/2009)">Дизайн</a> (0)</li>
	<li><a href="http://pronets.ru/7-sekretov-uspeshnogo-sayta/" title="7 секретов успешного сайта (16/06/2008)">7 секретов успешного сайта</a> (0)</li>
	<li><a href="http://pronets.ru/uluchsheniya-sistemyi-obrabotki-oshibok/" title="Улучшения системы обработки ошибок (04/06/2009)">Улучшения системы обработки ошибок</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/delaya-shablonyi-prosche/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Каркас приложения на PHP 5</title>
		<link>http://pronets.ru/karkas-prilozheniya-na-php-5/</link>
		<comments>http://pronets.ru/karkas-prilozheniya-na-php-5/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:02:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Форум IP.Board]]></category>
		<category><![CDATA[Invision Power Board]]></category>
		<category><![CDATA[Invision Power Board 3]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[IP.Board]]></category>
		<category><![CDATA[IP.Board 3]]></category>
		<category><![CDATA[IPB]]></category>
		<category><![CDATA[IPB 3]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP 5]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Каркас]]></category>
		<category><![CDATA[Приложение]]></category>
		<category><![CDATA[создание]]></category>
		<category><![CDATA[форум]]></category>

		<guid isPermaLink="false">http://pronets.ru/?p=466</guid>
		<description><![CDATA[Одним из главных обсуждений при планировании разработки Invision Power Board 3.0 было обсуждение необходимости продолжения поддержки PHP 4 продуктом и разработки продукта только под PHP 5. Разработка под PHP 5 имеет множество преимуществ, и мы реально представляем, что применение возможностей из 5-го PHP позволит увеличить безопасность и эффективность IPB. На решение об отказе от PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Одним из главных обсуждений при планировании разработки <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> 3.0 было обсуждение необходимости продолжения поддержки PHP 4 продуктом и разработки продукта только под PHP 5. Разработка под PHP 5 имеет множество преимуществ, и мы реально представляем, что применение возможностей из 5-го PHP позволит увеличить безопасность и эффективность <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a>. На решение об отказе от PHP 4 так же повлияли и новости PHP Group о прекращении разработки 4-ой версии.<br />
<span id="more-466"></span></p>
<p>Чтобы увидеть выгоду от использования PHP 5, нужно рассмотреть новую структуру <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a>, которая стала результатом перехода к 5-ке.</p>
<p>Хотя <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> 1 и 2 были основаны на паттерне &#8216;front controller&#8217;, они не имели реального каркаса, на который бы навешивался код. Близким к такому каркасу был &#8216;ipsclass&#8217;, который являлся супер-классом.</p>
<p>&#8216;ipsclass&#8217; был удобным методом транспортировки различных классов и функций внутри <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a>. Удобным, но не идеальным. Каждый должен был передавать этот супер-класс из класса в класс, попутно указывая PHP 4 передавать его по ссылке. Супер-класс содержал всю базовую функциональность <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a>. Объекты входных данных, пользователи, базы данных содержались в супер-классе наравне с множеством других объектов и функций. Ни один из них не был упорядочен в каком-либо логическом формате.</p>
<p>В итоге мы решили отказаться от &#8216;ipsclass&#8217; как супер-класса и реализовали паттерн &#8216;Controller -> Command -> View&#8217;. Это позволило нам быстро добавлять новый код и быстро рефакторить (оптимизировать, модифицировать) старый. Паттерн реализован поверх &#8216;IPS Registry&#8217; (регистр). IPS Registry является синглтоном (класс одиночка), который поддерживает интерфейсы к другим объектам (база данных, запрос, настройки и пользователь). Такая организация позволила нам легко передавать основные данные через различные слои нашего паттерна (каркаса). Остальные функции из &#8216;ipsclass&#8217; были перенесены в синглтоны:<br />
&#8220;IPSLib&#8221; – функции, которые не могут быть отнесены к какой-то определенной области;<br />
&#8220;IPSText&#8221; &#8211; функции для работы с текстом (разбор и очистка);<br />
&#8220;IPSCookie&#8221; &#8211; функции по работе с cookie;<br />
&#8220;IPSMember&#8221; &#8211; функции по работе с пользователями (загрузка, сохранение, обработка).</p>
<p>Это позволило сделать ясную структуру с четкими границами для каждого класса одиночки. Использование синглтонов (одиночек) позволило избавить вас от необходимости передачи объектов по ссылке из класса в класс.</p>
<p><strong>А теперь пример:</strong></p>
<p>Так было в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 2.3</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">settings</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'board_name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$id</span>    <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">member</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'f'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_cookie</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'foo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">txt_alphanumerical_clean</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$text</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">class_forums</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">build_info</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Так стало в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 3.0</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getField</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">settings</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getSetting</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'board_name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">member</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getProperty</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'member_id'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setField</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'f'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">print</span> IPSCookie<span style="color: #339933;">::</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'foo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> IPSText<span style="color: #339933;">::</span><span style="color: #004000;">alphanumerical_clean</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$text</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'class_forums'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">build_info</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Заметим, что мы реализовали интерфейс ArrayAccess для нашего регистра, так что вы сможете работать с ним еще и так:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">settings</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'board_name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>В коде выше используются $this->request, $this->member, стоит понимать, что внутри класса эти атрибуты устанавливаются в конструкторе. Ниже типичный пример такого конструктора.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span> ipsRegistry <span style="color: #000088;">$registry</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registry</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">member</span>   <span style="color: #339933;">=</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">member</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span>  <span style="color: #339933;">=</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">settings</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">settings</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">DB</span>       <span style="color: #339933;">=</span> <span style="color: #000088;">$registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">DB</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Так же вы можете обратиться к регистру и напрямую, хотя это настоятельно не рекомендуется делать:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">print</span> ipsRegistry<span style="color: #339933;">::</span><span style="color: #004000;">instance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getField</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Теперь вы можете создавать цепочки функций. Это позволяет создавать следующие красивые конструкции:</p>
<p>Так было в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 2.3</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load_template</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'skin_boards'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ipsclass</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">compiled_templates</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'skin_boards'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">board_index</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$data</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Так стало в <a href="http://pronets.ru/tag/ipb/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IPB">IPB</a> 3.0</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">print</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registry</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'output'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getTemplate</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'boards'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">board_index</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Как вы можете заметить, вам больше не надо явно загружать шаблон. Он будет загружен функцией &#8216;getTemplate&#8217;, если это еще не было сделано ранее. Затем объект шаблона будет возвращен функцией обратно и по цепочке будет вызван метод &#8216;board_index()&#8217; этого объекта. Такое простое упорядочение позволит писать меньше кода и сократит пространство для возникновения ошибок.</p>
<p>Мы нашли удачное применение абстрактным классам и интерфейсам, появившимся в 5-ой версии, для определения расширяемых классов. Это позволит другим разработчикам намного проще создавать дополнения к <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a>.</p>
<p>Структура &#8216;controller -> command&#8217; позволит вам добавлять новые модули и секции без каких-либо изменений в существующих файлах приложения. Разработчику модификаций достаточно будет создать новую папку с модом, а <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.Board сам запустит ее. Принцип работы структуры достаточно прост: контроллер получает переменные из <a href="http://pronets.ru/tag/url/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with URL">URL</a> и безопасно загружает управляющий (command) файл, если он найден. Например, адрес &#8220;appcomponent=core&#038;module=global§ion=login&#8221; заставит контроллер подключить управляющий файл &#8220;applications/core/modules_public/global/login.php&#8221;. Для уменьшения риска подделки управляющего файла мы ввели специальную проверку таких файлов с использованием механизма Reflections в <a href="http://pronets.ru/tag/ip/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with IP">IP</a>.B.</p>
<p>На данный момент мы рассмотрели только верхушку айсберга, но уже сейчас должно быть понятно, что каркас 3-ей версии <a href="http://pronets.ru/tag/invision-power-board/" class="st_tag internal_tag" rel="tag nofollow" title="Posts tagged with Invision Power Board">Invision Power Board</a> будет очень мощным и эффективным. И создание такой структуры стало возможно только лишь благодаря полному переходу к PHP 5, чьи возможности мы использовали на полную катушку.</p>

	<b>Метки:</b> <a href="http://pronets.ru/tag/ip/" title="IP" rel="tag nofollow">IP</a>, <a href="http://pronets.ru/tag/prilozhenie/" title="Приложение" rel="tag nofollow">Приложение</a>, <a href="http://pronets.ru/tag/ipboard-3/" title="IP.Board 3" rel="tag nofollow">IP.Board 3</a>, <a href="http://pronets.ru/tag/php/" title="PHP" rel="tag nofollow">PHP</a>, <a href="http://pronets.ru/tag/ipb-3/" title="IPB 3" rel="tag nofollow">IPB 3</a>, <a href="http://pronets.ru/tag/forum/" title="форум" rel="tag nofollow">форум</a>, <a href="http://pronets.ru/tag/sozdanie/" title="создание" rel="tag nofollow">создание</a>, <a href="http://pronets.ru/tag/invision-power-board-3/" title="Invision Power Board 3" rel="tag nofollow">Invision Power Board 3</a>, <a href="http://pronets.ru/tag/ipb/" title="IPB" rel="tag nofollow">IPB</a>, <a href="http://pronets.ru/tag/invision-power-board/" title="Invision Power Board" rel="tag nofollow">Invision Power Board</a><br /><br />

	<ul class="st-related-posts">
	<li><a href="http://pronets.ru/logotip-iz-4-kartinok/" title="Логотип из 4 картинок (22/03/2009)">Логотип из 4 картинок</a> (0)</li>
	<li><a href="http://pronets.ru/twitter-clovar/" title="#Тwitter-Cловарь (27/05/2010)">#Тwitter-Cловарь</a> (0)</li>
	<li><a href="http://pronets.ru/importeksport-skinov-ipboard/" title="Импорт/Экспорт скинов IP.Board (15/12/2008)">Импорт/Экспорт скинов IP.Board</a> (0)</li>
	<li><a href="http://pronets.ru/obnovlenie-ipboard/" title="Обновление (upgrade) IP.Board (31/08/2008)">Обновление (upgrade) IP.Board</a> (0)</li>
	<li><a href="http://pronets.ru/zachem-lyudi-sozdayut-blogi/" title="Зачем люди создают блоги? (10/05/2010)">Зачем люди создают блоги?</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://pronets.ru/karkas-prilozheniya-na-php-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
