<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
			<channel>
			<title>Alto CMS/Блог им. andreyv</title>
			<link>http://79.174.14.219/profile/andreyv/created/topics/</link>
			<description><![CDATA[Это ваш персональный блог.]]></description>
			<language>ru</language>
			<managingEditor>andreyv@gladcode.ru</managingEditor>
			<webMaster>noreply@altocms.ru</webMaster>
			<generator>Alto CMS v.1.5.0b1</generator>
							<item>
					<title>Alto и PhpStorm</title>
					<guid isPermaLink="true">http://79.174.14.219/t/958/</guid>
					<link>http://79.174.14.219/958.html</link>
					<author>andreyv@gladcode.ru</author>
					<description><![CDATA[Здравствуйте,<br>
Уже довольно продолжительное время работаю с <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a> именно в PhpStorm и за это время наработался некоторый набор приёмов которыми и хотелось бы поделиться. <br>
PhpStorm — это полноценная среда разработки, которая содержит в себе такой объём вспомогательного инструментария который покрывает большинство нужд при работе с конкретным проектом. Что именно я использовал в процессе работы над плагинами для <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a> и движком:<br>
— поддержка git и взаимодействие с гитхабом;<br>
— поддержка шаблонов Smarty;<br>
— file watcher c компиляцией less-файлов на лету;<br>
— поддержка сборщика проектов phing;<br>
— встроенная консоль;<br>
— поддержка отладчика xdebug;<br>
— поиск по проекту, в том числе и по регулярному выражению;<br>
— взаимодействие напрямую с БД без всяких phpmyadmin-ов;<br>
— подсветка синтаксиса во «второстепенных файлах» (отчасти с помощью плагинов для IDE) — .gitignore, .md, .htaccess и др.<br>
— классный автокомплит;<br>
— шаблоны кода, например шаблоны экшенов, модулей и т.д.<br>
— использование окружений (scope) позволяющих создавать в рамках проекта наборы различных фалов – окружение для разработки плагина, шаблона…<br>
— механизм деплоя кода;<br>
— поддержка composer;<br>
— phpDoc<br>
наверное сразу и не вспомнишь всё чем пользуешься…<br>
Не буду долго описывать плюсы и минусы, а лучше на примере покажу процедуру подготовки проекта плагина. Сам ход работы состоит из нескольких шагов, которые выполняются максимум за пять минут:<br>
— клонирование репозиотрия <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a> CMS;<br>
— создание основы плагина через консоль;<br>
— создание гит-репозитория плагина;<br>
<h4>1. Клонирование репозиотрия <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a> CMS</h4>
Этот этап реализуется довольно быстро – выбором создания проекта их репозитория гит. Адрес репозитория Альто — <a href="https://github.com/altocms/altocms.git" rel="nofollow">https://github.com/altocms/altocms.git</a><br>
<img src="https://altocms.ru/uploads/images/00/02/20/2015/01/24/0u201b188e-4c8c69ff-3210473e.png"><br>
После нажатия кнопки «Clone» у себя на локальном компьютере вы получите точную копию текущей мастер-ветки <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a>. И даже если вдруг в репозиторий будут внесены какие-то изменения, то вы всегда сможете в любой момент обновить свою локальную копию одним нажатием кнопки.<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2015/01/24/0u24dc0710-1d610d6b-47067493.png"><br>
<br>
<h4>2. Создание основы плагина через консоль</h4>
Не очень известный момент, но в составе <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a> идет php скрипт, который будучи вызван из консоли создаёт «пустой» плагин – основу для дальнейшей разработки. Шаблон пустого плагина находится здесь — common/console/protected/plugin и его можно (и даже нужно) изменить под свои нужды, установить копирайты, отформатировать согласно принятым у вас нормам и т.д. Далее простой комндой в консоли PhpStorm запускаем создание плагина (разумеется, путь к интерпретатору php должен быть указан):<br>
<pre class="prettyprint"><code>&#62;cd common/console – меняем каталог
&#62;php ls plugin new test – создаем плагин</code></pre><br>
<img src="https://altocms.ru/uploads/images/00/02/20/2015/01/24/0u2173e515-4d7e7b99-4643bd3e.png"> <br>
После этого плагин уже доступен в админ.панели.<br>
<br>
<h4>3. Создание гит-репозитория плагина</h4>
Здесь тоже всё просто, поскльку поддержака git в PhpStorm идет «из коробки» и достаточно только создать в папке плагина гит-репозиторий выбрав соответствующую команду меню (VCS-&#62;Import into Version Control-&#62;Create Git Repository) и всё.<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2015/01/24/0u15378dd9-58f34404-5769a5cb.png">]]></description>
					<pubDate>Sat, 24 Jan 2015 22:24:49 +0300</pubDate>
									</item>
							<item>
					<title>А Вы используете трекер?</title>
					<guid isPermaLink="true">http://79.174.14.219/t/405/</guid>
					<link>http://79.174.14.219/405.html</link>
					<author>andreyv@gladcode.ru</author>
					<description><![CDATA[Здравствуйте<br>
Вот снова выдалось немного свободного времени и по причине наличия такового хочу поделиться с Вами кусочком своей работы. Может показаться, что топик носит рекламный характер – нет на самом деле, просто всегда интересно рассказывать о Качественных (с большой буквы К), продуктах.<br>
<br>
О чем же пойдет речь? Каждый разработчик знает, что даже маленький проект состоит из кучи этапов со своими приоритетами и задачами. При разработке «больших» продуктов, при работе группой разработчиков, полный цикл управления этапами разработки ПО обеспечивает, от части, тот или иной трекер используемый в компании. Маленькие организации или же разработчики-одиночки ведут лог своих работ так как придется. До поры – до времени так же работал и я, но однажды надоело, и я решил найти подходящий трекер и использовать его в своей работе.<br>
<br>
Что из этого вышло – под катом.<br>
Отдав некоторое время googl-у я понял, что трекер – это дорогое удовольствие. Поискал бесплатные продукты (они есть), ну и что бы сложить свое мнение о такого рода ПО решил погонять пробную версию. Я долго не выбирал производителя, мне всегда нравились продукты JetBrains и я решил попробовать YouTrack и был приятно удивлен.<br>
<ul><li>— Во-первых: Дистрибутив под Windows с беспроблемной установкой – для тестирования самое оно – не нужно пол дня убивать на установку.</li><li>— Во-вторых: Бесплатная версия для групп разработчиков в количестве до 10 человек. Кстати, лицензия до 25 человек стоит уже $500.</li><li>— В третьих: полноценный продукт без ограничений для open-source проектов. Тут я почему-то задумался об <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a>. Интересно, какой трекер используют разработчики CMS?</li><li>— В четвертых: Полностью русифицированный интерфейс.</li><li>— В пятых: Можно вообще не заморачиваться и использовать облачную версию, но для бесплатного тарифа запрещены закрытые проекты.</li></ul>
<br>
Подробнее, про условия использования и цены здесь <a href="http://www.jetbrains.com/youtrack/buy/index.jsp" rel="nofollow">http://www.jetbrains.com/youtrack/buy/index.jsp</a><br>
<br>
А дальше сплошные бонусы и плюсы….<br>
<br>
<a href="https://altocms.ru/908.html" title="<strong>установка&nbsp;</strong><br>&lt;h5&gt;Перед установкой&lt;/h5&gt;Что вам нужно знать прежде, чем приступить к установке Alto CMS:&lt;br/&gt;
&lt;ol&gt;&lt;li&gt;У вас должен быть доступ к хостингу, где расположен ваш сайт. Это может быть либо FTP-доступ, либо SSH. Если вам эти аббревиатуры ничего не говорят, то, возможно, стоит обратиться к специалисту&lt;/li&gt;&lt;li&gt;Вы должны знать данные для доступа к серверу баз данных. В большинстве случаев достаточно знать имя пользователя базы данных и пароль. Сама база данных может быть создана заранее (тогда вам необходимо знать ее имя), либо вы можете создать в процессе установки.&lt;/li&gt;&lt;li&gt;Так же вам потребуются следующие программы:&lt;br/&gt;
&lt;ul&gt;&lt;li&gt;FTP-клиент (если у вас FTP-доступ) или SSH-клиент (если доступ SSH). Если у вас еще нет этих программ, то в качестве первого можно рекомендовать &lt;a href=&quot;http://wincmd.ru/plugring/totalcmd.html&quot; rel=&quot;nofollow&quot; &gt;Total Commander&lt;/a&gt;, а в качестве второго – &lt;a href=&quot;http://winscp.net/eng/docs/lang:ru&quot; rel=&quot;nofollow&quot; &gt;WinSCP&lt;/a&gt;, оба они бесплатны.&lt;/li&gt;&lt;li&gt;Текстовый редактор, которым вы сможете редактировать файлы конфигурации (&lt;strong&gt;Внимание: нельзя для этого использовать программы, вроде MS Word!&lt;/strong&gt;). Рекомендуем для этого использовать бесплатную программу &lt;a href=&quot;http://notepad-plus-plus.org/download/&quot; rel=&quot;nofollow&quot; &gt;Note++&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br/&gt;
&lt;h5&gt;Подготовка к установке&lt;/h5&gt;&lt;ol&gt;&lt;li&gt;Необходимо скопировать файлы Alto CMS в папку вашего сайта. Это может быть как корневая папка, так и подпапка.&lt;/li&gt;&lt;li&gt;Необходимо установить права на запись на следующие папки:&lt;br/&gt;
&lt;ul&gt;&lt;li&gt;/_run&lt;/li&gt;&lt;li&gt;/_tmp&lt;/li&gt;&lt;li&gt;/app/plugins&lt;/li&gt;&lt;li&gt;/uploads&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;Найдите в папке &lt;strong&gt;/app/config/&lt;/strong&gt; файл &lt;strong&gt;config.local.php.txt&lt;/strong&gt; и переименуйте его в &lt;strong&gt;config.local.php&lt;/strong&gt;, разрешив в него запись.&lt;br/&gt;
&lt;br/&gt;
Также убедитесь так же, что существует и доступен для записи файл &lt;strong&gt;/app/plugins/plugins.dat&lt;/strong&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;h5&gt;Установка Alto CMS&lt;/h5&gt;Теперь вы можете приступить непосредственно к установке. Для этого введите в вашем любимом браузере адрес главной страницы сайта, который вы создаете. Например, &lt;strong&gt;site.com&lt;/strong&gt;. Если вы устанавливаете Alto CMS в папку, то необходимо ввести ее адрес, например, &lt;strong&gt;site.com/altocms/&lt;/strong&gt;&lt;br/&gt;
&lt;br/&gt;
Вы должны увидеть экран установки Alto CMS. Следуйте инструкциям по установке, которая состоит из четырех простых шагов.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Шаг 1: Проверка конфигурации сервера&lt;/strong&gt;&lt;br/&gt;
Система самостоятельно проверит, все ли готово для установки. Если чего-то не хватает, что-то не было подготовлено – она сообщит об этом. Если все нормально, вы сможете перейти на второй шаг.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Шаг 2: Настройка базы данных&lt;/strong&gt;&lt;br/&gt;
В большинстве случаев достаточно указать имя базы данных, имя пользователя и пароль. Если база данных не была создана до этого, то нужно отметить «Создать базу данных».&lt;br/&gt;
&lt;br/&gt;
Вы можете также захотеть изменить поле «Префикс таблиц». И это даже настоятельно рекомендуется сделать, если одну базу данных использует несколько систем.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Шаг 3: Настройка данных администратора&lt;/strong&gt;&lt;br/&gt;
Необходимо указать логин, адрес электронной почты и пароль администратора сайта. Впоследствии, если пожелаете, администраторов на сайте может быть сколько угодно, но сейчас нужно задать данные самого первого из них.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Шаг 4:… а его нет!&lt;/strong&gt; Установка завершена, и вы можете приступить к работе с вашим сайтом. Но перед этим нужно сделать самую последнюю вещь – удалить папку /install/, из которой и шла установка. Это обязательно нужно сделать в целях безопасности. &lt;br/&gt;
&lt;br/&gt;
Сделали? Поздравляем! И помните: если у вас появятся какие-то вопросы или возникнут проблемы, то вы всегда можете обсудить их и найти ответы в нашем сообществе." class="term">Установка</a> прошла на удивление быстро, единственное, дабы YouTrack не конфликтовал с локальным сервером я указал ему отдельный порт. С Денвером не тестировал, я использую EasyPHP.<br>
<br>
<h4>Создание проекта</h4>
Работа с трекером начинается с создания проекта. Здесь также сложного мало, весь процесс сводиться к настройке используемых полей, характеристик задачи проекта (можно создавать и свои). <br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/11/22/67fc14.png" class="image-center"><br>
<br>
Я использую следующие:<br>
<ol><li>Тип задачи – Задание, Ошибка, Фугкционал, Косметика и т.д.</li><li>Состояние – Зарегистрирована, В работе, Выполнено …</li><li>Исполнитель – Я.</li><li>Версия исправления – версия ПО, в которой выполняется задача.</li><li>Оценка – Оценочное время на выполнение задачи.</li><li>Затраченное время – указывается по мере выполнения задачи и позволяет вести хронометрах работы.</li><li>Начало этапа – созданное мной поле – показывает когда я начал задачу, для того, что бы оценить сколько времени было на нее затрачено.</li> </ol>
<br>
<h4>Создание задачи</h4>
Задача – определенный этап в разработке. Бывают отдельные задачи, связанные задачи, подзадачи.<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/11/22/1e4439.png" class="image-center"><br>
Для каждой задачи указываются настроенные выше поля и:<br>
<ul><li>— Описание задачи можно давать в вики-разметке.</li><li>— Комментарии к задаче можно связывать со временем исполнения. То есть сделали что-нибудь, написали коммент по этому поводу, а трекер сам определил на какой минуте работы над задачей это было сделано (на картинке, снизу).</li><li>— При создании задачи трекер сам ищет похожие задачи. То есть, если Вы (или кто-то) один раз сделали этап в этом, или другом проекте, и пытаетесь создать похожую задачу – трекер сообщит об этом и Вы сможете посмотреть как задача была реализована ранее.</li><li>— За задачами можно следить, голосовать, сообщая разработчикам о важности задачи…</li><li>— В задаче можно вести учет отработанного по ней времени. Что очень интересно при почасовой оплате ).</li></ul>
<br>
<h4>Доска Agile</h4>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/11/22/0eff0c.png" class="image-center"><br>
На картинке может и не видно, но эти блоки – задачи раскрашенные по типу и выстроенные по очереди исполнения – ее просто нужно попробовать в работе и, поверьте, она станет Вашим большим помощником.<br>
<br>
Не буду расписывать – там все по русски и в картинках написано в навигаторе доски, который можно вызвать нажатием соответствующей кнопки вверху страницы.<br>
<br>
<h4>Отчетность</h4>
Отчетности не много, но ее хватает – это табличные отчеты и отчеты по времени – вот пример – что было сделано и сколько времени на это было затрачено:<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/11/22/4ef053.png" class="image-center"><br>
<br>
<h4>Интеграция с почтой</h4>
YouTrack позволяет настроить чтение почтового ящика с помощью правил так, что любое присланное письмо будет автоматически создавать задачу. То есть, заказчик/тестер нашел баг, отправил его описание на почту, а у Вас создалась задача и автоматически встала в очередь на исполнение.<br>
Это можно сделать даже на локальной машине из-под Windows. <br>
<br>
<h4>Интеграция с PhpStorm</h4>
Так как продукты одного производителя, то, разумеется, они очень четко и слаженно работают вместе. Из PhpStorm можно читать задачи трекера, которые можно связать с функционалом Tasks &#38; Context.<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/11/22/942823.png" class="image-center"><br>
В YouTrack еще много всего нужного и удобного, но обо всем не напишешь. <br>
Удачной работы.]]></description>
					<pubDate>Fri, 22 Nov 2013 11:42:22 +0400</pubDate>
									</item>
							<item>
					<title>Проксирование псевдовызовов</title>
					<guid isPermaLink="true">http://79.174.14.219/t/339/</guid>
					<link>http://79.174.14.219/339.html</link>
					<author>andreyv@gladcode.ru</author>
					<description><![CDATA[Вчера при обсуждении <a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a> <a href="https://altocms.ru/919.html" title="<strong>coding style&nbsp;</strong><br>Общая схема имени переменной выглядит следующим образом: &lt;strong&gt;префикс&lt;/strong&gt;+&lt;strong&gt;ДополнительныйПрефикс&lt;/strong&gt;+&lt;strong&gt;ИмяПеременной&lt;/strong&gt;+&lt;strong&gt;Суффикс&lt;/strong&gt;. Имена переменных содержат латинские буквы верхнего и нижнего регистров и начинаются с префикса, записаного в нижнем регистре, обозначающего тип данных значения этой переменной. Перечень префиксов, рекомендованых к использованию указан ниже. Дополнительный префикс конкретизирует значение переменной и выбирается из перечня указанных ниже рекоммендуемых дополнительных префиксов. Имя переменной состоит из одного или нескольких слов, описывающих смысловое значение этой переменной, и записывается горбатым регистром. Так как префиксы описывают тип значения переменной, ее имя описывает экземпляр данного типа в единственном числе. Суффикс дополняет имя переменной и конкретизирует ее смысловое значение. Перечень суффиксов, рекоммендованых к использованию указан ниже. Цифры в имени допускаются, но не рекомендуются. Знак нижнего подчеркивания в имени не используется.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Префиксы&lt;/strong&gt;&lt;br/&gt;
Рекомендован к использованию следующий перечень префиксов:&lt;br/&gt;
 — a (array) — массив значение;&lt;br/&gt;
 — b (bool) — логическое значение;&lt;br/&gt;
 — e (entity) — объект типа Entity и наследуемые от него;&lt;br/&gt;
 — i (integer) — целочисленное значение;&lt;br/&gt;
 — f (float) — значение вещественного типа;&lt;br/&gt;
 — m (mapper) — объект типа Mapper и наследуемые от него;&lt;br/&gt;
 — n (number) — значение неопределеного цифрового типа, которое может принимать как целое, так и&lt;br/&gt;
вещественное значение. Требует проверки на значение типа при использовании.&lt;br/&gt;
&lt;br/&gt;
 — o (object) — объект, типа отличного от Mapper и Entity;&lt;br/&gt;
 — s (string) — строковое значение;&lt;br/&gt;
 — x (miXed) — объект смешанного типа. Требует проверки на значение типа при использовании.&lt;br/&gt;
&lt;br/&gt;
Рекомендован к использованию следующий перечень дополнительных префиксов:&lt;br/&gt;
 — Min (minimum) — минимальное значение;&lt;br/&gt;
 — Max (maximum) — максимальное значение;&lt;br/&gt;
 — Current — текущее значение.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Суффиксы&lt;/strong&gt;&lt;br/&gt;
В отличие от Дополнительных префиксов суффиксы конкретизируют семантическое значение имени переменной, а не ее&lt;br/&gt;
значение. Рекомендован к использованию следующий перечень суффиксов:&lt;br/&gt;
 — First — первое значение из доступного списка;&lt;br/&gt;
 — Last — последнее значение из доступного списка;&lt;br/&gt;
 — Limit — предельное значение из доступного списка;&lt;br/&gt;
 — Tmp — временное значение;&lt;br/&gt;
 — New — новое (устанавливаемое) значение;&lt;br/&gt;
 — Old — старое (затираемое) значение;&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Исключения&lt;/strong&gt;&lt;br/&gt;
Существуют имена переменных, предназначенных для специального использования — исключения из указанных&lt;br/&gt;
рекоммендаций:&lt;br/&gt;
 — i, j — итераторы для небольших циклов (цикл считается небольшим, если помещается полностью на&lt;br/&gt;
один экран и позволяет увидеть сразу все вхождения итераторов);&lt;br/&gt;
 — k, v — переменные цикла foreach ($aData as $k =&amp;gt; $v);&lt;br/&gt;
 — key, value — переменные цикла foreach ($aData as $key =&amp;gt; $value);&lt;br/&gt;
 — s — cериализованное представление данных;&lt;br/&gt;
 — data — переменная с данными в сеттере сущности, а также данные возвращаемые из методов маппера;&lt;br/&gt;
 — sql — в мапперах переменная, содержащая текст запроса – префикс «s» не используется." class="term">Coding Style</a> <a href="https://altocms.ru/profile/aVadim/" data-alto-role="popover" data-api="user/2/info">aVadim</a> высказал мысль <blockquote>Вообще, в далекой перспективе мне хотелось бы изменить синтаксис псевдовызовов методов моделей и писать так: $this-&#62;ModuleUser-&#62;getUsersByFilter(); Но это сугубо личные предпочтения</blockquote>
<br>
По причине выходного дня и наличия немногого свободного времени — предлагаю экспромт на эту тему. Опять же не стоит относиться к предложению как к готовому решению — это всего лишь способ — может и вообще ненужный и не к месту (<br>
<br>
Хочу обращаться к модулям и их методам так:<br>
<pre class="prettyprint"><code>$aReturn = $this-&#62;modules-&#62;topic-&#62;getTopicsByFilter($aFilter,$iPage,$iPerPage,array(&#39;user&#39;,&#39;blog&#39;));</code></pre><br>
А не так:<br>
<pre class="prettyprint"><code>$aReturn = $this-&#62;Topic_GetTopicsByFilter($aFilter,$iPage,$iPerPage,array(&#39;user&#39;,&#39;blog&#39;));</code></pre><br>
<br>
Вообщем в голову пришла мысль не менять существующий уклад в LS, а просто добавить проксирующие свойства, которые просто передавали бы данные в псевдовызовы. Организовать альтернативную форму записи – и вот что из этого получилось.<br>
<br>
Задача: <strong>Убрать магию из вызовов методов модулей</strong>.<br>
Что это даст: <strong>Автокомплит, PHPDoc, повысит читабельность кода, сделает возможным использовать инспектора кода</strong><br>
<br>
<h6>Решение</h6>
Без хака, конечно же, не обошлось, но изменения были внесены минимальные:<br>
<strong>1.</strong> В класс LsObject добавлено свойство $modules, а конструктор класса – инициализация этого свойства – так:<br>
<pre class="prettyprint"><code>abstract class LsObject {
    public $modules;
    public function __construct() {
        $this-&#62;modules = new modules();
    }
</code></pre><br>
Сам класс modules прост и незамысловат – он получает лишь модуль по его имени:<br>
<pre class="prettyprint"><code>class modules {
    public function __get($sName) {
        return Engine::getInstance()-&#62;getModule(ucwords($sName).&#39;_&#39;)[0];
    }
}
</code></pre><br>
<strong>2.</strong> В классе <strong>Module</strong> от которого наследуются все модули в конструктор добавим вызов родительского конструктора:<br>
<pre class="prettyprint"><code>final public function __construct(Engine $oEngine) {
        parent::__construct(); // &#60;-- здесь
        $this-&#62;oEngine = $oEngine;
    }
</code></pre><br>
<strong>3.</strong> Тоже в конструктор сущности <br>
<pre class="prettyprint"><code>    public function __construct($aParam = null) {
        parent::__construct();// &#60;-- здесь
        $this-&#62;_setData($aParam);
        $this-&#62;Init();
    }
</code></pre><br>
<br>
Теперь можно обращаться к методам модуля через данное свойство, так (это пример из плагина Categories — и он работает):<br>
<pre class="prettyprint"><code>$aReturn = $this-&#62;modules-&#62;topic-&#62;getTopicsByFilter($aFilter,$iPage,$iPerPage,array(&#39;user&#39;,&#39;blog&#39;));</code></pre><br>
И теперь доступен автокомплит и phpDoc!<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/09/22/4c4299.png" class="image-center"><br>
<br>
<h6>Плагины</h6>
Для них на самом деле рабоает такой код:<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/09/22/bf2a0d.png" class="image-center"><br>
Но это не очень красиво — внесем некоторые правки в файл класса LsObject^<br>
<pre class="prettyprint"><code>class modules {
    private $sPluginName = &#34;&#34;;

    public function __construct($sPluginName=&#34;&#34;) {
        $this-&#62;sPluginName = &#39;Plugin&#39; . ucwords($sPluginName) . &#39;_&#39;;
    }

    public function __get($sName) {
        return Engine::getInstance()-&#62;getModule(
            (($this-&#62;sPluginName==&#39;Plugin_&#39;)?&#39;&#39;:$this-&#62;sPluginName) . ucwords($sName).&#39;_&#39;)[0];
    }
}

class plugins {
    private $modules;

    public function __get($sName) {
        $this-&#62;modules = new modules($sName);
        return $this;
    }
}

/**
 * От этого класса наследуются все остальные
 *
 * @package engine
 * @since 1.0
 */
abstract class LsObject {

    public $modules;

    public $plugins;

    public function __construct() {
        $this-&#62;modules = new modules();
        $this-&#62;plugins = new plugins();
    }

    // Здесь родной метод __call, но я его не указал
}
</code></pre><br>
Это позволяет обращаться к модулям плагинов так:<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/09/22/9630a6.png" class="image-center"><br>
Но здесь не работает автокомплит, для этих целей создадим в директории плагина файл, единственной целью которого будет доставлять возможность автокомплита и PHPDoc — вот содержимое этого файла:<br>
<pre class="prettyprint"><code>&#60;?php
die();
class plugins {

    /**
     * Плагин функционала категории для блогов и формировщик главной
     * @var PluginCategories_ModuleCategories
     */
    public $categories;
}

class modules {
    /**
     * Модуль управления категориями блогов
     * @var PluginCategories_ModuleCategories
     */
    public $categories;
}</code></pre><br>
<br>
Теперь автокомплит и документация доступна:<br>
<img src="https://altocms.ru/uploads/images/00/02/20/2013/09/22/3b1fac.png" class="image-center"><br>
<br>
Заметьте — для свойства <strong>plugins</strong> автокомплит показывает перечень всех установленных плагинов (если они работают через проксирующие методы),а PHPDoc документацию по модулю и методам модуля :)<br>
<br>
<h6>ЗЫ:</h6>
Да, этот подход позволяет сделать унифицированное правило именования методов — с маленькой буквы, как это обсуждалось в комментариях к статье об <a href="https://altocms.ru/921.html" title="<strong>ACS&nbsp;</strong><br>Общая схема имени переменной выглядит следующим образом: &lt;strong&gt;префикс&lt;/strong&gt;+&lt;strong&gt;ДополнительныйПрефикс&lt;/strong&gt;+&lt;strong&gt;ИмяПеременной&lt;/strong&gt;+&lt;strong&gt;Суффикс&lt;/strong&gt;. Имена переменных содержат латинские буквы верхнего и нижнего регистров и начинаются с префикса, записаного в нижнем регистре, обозначающего тип данных значения этой переменной. Перечень префиксов, рекомендованых к использованию указан ниже. Дополнительный префикс конкретизирует значение переменной и выбирается из перечня указанных ниже рекоммендуемых дополнительных префиксов. Имя переменной состоит из одного или нескольких слов, описывающих смысловое значение этой переменной, и записывается горбатым регистром. Так как префиксы описывают тип значения переменной, ее имя описывает экземпляр данного типа в единственном числе. Суффикс дополняет имя переменной и конкретизирует ее смысловое значение. Перечень суффиксов, рекоммендованых к использованию указан ниже. Цифры в имени допускаются, но не рекомендуются. Знак нижнего подчеркивания в имени не используется.&lt;br/&gt;
" class="term">ACS</a> (см. картинки к статье)]]></description>
					<pubDate>Sun, 22 Sep 2013 12:53:22 +0400</pubDate>
									</item>
							<item>
					<title>Alto Coding Style</title>
					<guid isPermaLink="true">http://79.174.14.219/t/336/</guid>
					<link>http://79.174.14.219/336.html</link>
					<author>andreyv@gladcode.ru</author>
					<description><![CDATA[Тихой сапой начал создавать документ с громким названием «<a href="https://altocms.ru/871.html" title="<strong>Alto&nbsp;</strong><br>Если вы собираетесь создавать сайт и выбираете для этой цели CMS (или «движок», как еще говорят), то наверняка у вас возникает вопрос: «А чем же Alto лучше других CMS? И годится ли для моих задач?»&lt;br/&gt;
&lt;br/&gt;
Выбирая Alto CMS, вы получаете «из коробки» функционал, который в других движках достигается установкой множества плагинов:" class="term">Alto</a> <a href="https://altocms.ru/919.html" title="<strong>coding style&nbsp;</strong><br>Общая схема имени переменной выглядит следующим образом: &lt;strong&gt;префикс&lt;/strong&gt;+&lt;strong&gt;ДополнительныйПрефикс&lt;/strong&gt;+&lt;strong&gt;ИмяПеременной&lt;/strong&gt;+&lt;strong&gt;Суффикс&lt;/strong&gt;. Имена переменных содержат латинские буквы верхнего и нижнего регистров и начинаются с префикса, записаного в нижнем регистре, обозначающего тип данных значения этой переменной. Перечень префиксов, рекомендованых к использованию указан ниже. Дополнительный префикс конкретизирует значение переменной и выбирается из перечня указанных ниже рекоммендуемых дополнительных префиксов. Имя переменной состоит из одного или нескольких слов, описывающих смысловое значение этой переменной, и записывается горбатым регистром. Так как префиксы описывают тип значения переменной, ее имя описывает экземпляр данного типа в единственном числе. Суффикс дополняет имя переменной и конкретизирует ее смысловое значение. Перечень суффиксов, рекоммендованых к использованию указан ниже. Цифры в имени допускаются, но не рекомендуются. Знак нижнего подчеркивания в имени не используется.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Префиксы&lt;/strong&gt;&lt;br/&gt;
Рекомендован к использованию следующий перечень префиксов:&lt;br/&gt;
 — a (array) — массив значение;&lt;br/&gt;
 — b (bool) — логическое значение;&lt;br/&gt;
 — e (entity) — объект типа Entity и наследуемые от него;&lt;br/&gt;
 — i (integer) — целочисленное значение;&lt;br/&gt;
 — f (float) — значение вещественного типа;&lt;br/&gt;
 — m (mapper) — объект типа Mapper и наследуемые от него;&lt;br/&gt;
 — n (number) — значение неопределеного цифрового типа, которое может принимать как целое, так и&lt;br/&gt;
вещественное значение. Требует проверки на значение типа при использовании.&lt;br/&gt;
&lt;br/&gt;
 — o (object) — объект, типа отличного от Mapper и Entity;&lt;br/&gt;
 — s (string) — строковое значение;&lt;br/&gt;
 — x (miXed) — объект смешанного типа. Требует проверки на значение типа при использовании.&lt;br/&gt;
&lt;br/&gt;
Рекомендован к использованию следующий перечень дополнительных префиксов:&lt;br/&gt;
 — Min (minimum) — минимальное значение;&lt;br/&gt;
 — Max (maximum) — максимальное значение;&lt;br/&gt;
 — Current — текущее значение.&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Суффиксы&lt;/strong&gt;&lt;br/&gt;
В отличие от Дополнительных префиксов суффиксы конкретизируют семантическое значение имени переменной, а не ее&lt;br/&gt;
значение. Рекомендован к использованию следующий перечень суффиксов:&lt;br/&gt;
 — First — первое значение из доступного списка;&lt;br/&gt;
 — Last — последнее значение из доступного списка;&lt;br/&gt;
 — Limit — предельное значение из доступного списка;&lt;br/&gt;
 — Tmp — временное значение;&lt;br/&gt;
 — New — новое (устанавливаемое) значение;&lt;br/&gt;
 — Old — старое (затираемое) значение;&lt;br/&gt;
&lt;br/&gt;
&lt;strong&gt;Исключения&lt;/strong&gt;&lt;br/&gt;
Существуют имена переменных, предназначенных для специального использования — исключения из указанных&lt;br/&gt;
рекоммендаций:&lt;br/&gt;
 — i, j — итераторы для небольших циклов (цикл считается небольшим, если помещается полностью на&lt;br/&gt;
один экран и позволяет увидеть сразу все вхождения итераторов);&lt;br/&gt;
 — k, v — переменные цикла foreach ($aData as $k =&amp;gt; $v);&lt;br/&gt;
 — key, value — переменные цикла foreach ($aData as $key =&amp;gt; $value);&lt;br/&gt;
 — s — cериализованное представление данных;&lt;br/&gt;
 — data — переменная с данными в сеттере сущности, а также данные возвращаемые из методов маппера;&lt;br/&gt;
 — sql — в мапперах переменная, содержащая текст запроса – префикс «s» не используется." class="term">Coding Style</a>» — правда, пока только начал с системы именований. Такую работу, конечно, нельзя сделать быстро и одному, поэтому проект находиться на github — <a href="https://github.com/andrey-v/alto-name-rules" rel="nofollow">здесь</a> .<br>
<br>
Просьба ко всем неравнодушным корректировать, добавлять, удалять…. Даже если Вы далеки от программирования, то можете проверить на орфографию и стиль изложения, например ).<br>
<br>
Да, не забываем, что редактировать тексты можно прямо на github-е.<br>
<br>
Обсуждать предлагаю в комментариях к этому топику.]]></description>
					<pubDate>Sat, 21 Sep 2013 12:45:02 +0400</pubDate>
									</item>
					</channel>
	</rss>
