Утилита "Генератор компонента"

+56
3.41K
Создание утилиты "Генератор копонента" для iCMS v 1.10.3. Описание работы с ней и указания на вопросы безопасности. Назначение утилиты — избавить кодера от рутины и дать ему простой инструмент для создания заготовки компонента.

Постановка задачи.

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

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

Для кого писалась утилита?

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

Безопасность

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

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

Если Вы вдруг надумали писать все-таки на удаленном сервере (например, используя PhpStorm), то:
— во-первых, помните о безопасности. Удалите утилиту сразу после использования.
— во-вторых, настройки удаленного сервера могут отличаться от настроек Денвера. В этом случае, я не обещаю корректную работу утилиты.

Работа с утилитой

Распакуйте утилиту в корень локального сайта. Затем наберите адрес вашего локального хоста, слэш и имя утилиты (sitename.my/generator_com.php). Откроется форма, где надо ответить на все вопросы. Вся необходимая информация там есть в подсказках и инструкциях.
1. Имя компонента латиницей. Это имя должно быть уникально и не может совпасть с именами других, уже установленных компонентов. Поскольку это имя будет в составе url страницы, смотрите, чтобы там не было символов, невоспринимаемых в URL. Например, знак подчеркивания не катит, а минус — пожалуйста.
2. Название компонента, можно по русски.
3. Автор компонента. Скорее всего это Вы.
4. Галка публикации. По умолчанию установлена. Можете снять, если не хотите немедленно публиковать компонент на сайте. Можете потом, после отработки утилиты, зайти в админку и включить/выключить публикацию компонента.
5. Создавать или нет админку. Иногда простые компоненты обходятся без админки. Выбирайте, исходя из своих замыслов будущего (Вашего!!!!) компонента.
6. Префикс таблиц Вашей базы данных. Укажите тот префикс, который вы указали, когда устанавливали Инстант на сервер. По умолчанию, естественно, cms_
7. Версия компонента. Любые шесть символов. По умолчанию 1.0.

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

После создания компонента Вам предстоит пройти в админку и создать пункт меню, указывающий на Ваш новый компонент. Этот компонент после своего рождения умеет делать одну-единственную вещь: он выводит мем "Здравствуй, мир". Наполнение компонента функционалом — это уже ваше дело. Что хотите, то и творите.

Дизайн

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

Настройки

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

Генерируемые файлы.

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

Подключение компонента к сайту

После создания структуры утилита подключается к БД и прописывает новый компонент в таблицу cms_components. Так что никаких sql-запросов делать не надо.

Что нового в этой версии?

1. Утилита теперь проверяет, есть ли в БД компонент с именем, который Вы даете своему творению. Если есть, ничего не делает и выводит сообщение об этом.
2. Теперь можно назначить своему компоненту номер версии, отличный от 1.0.
3. Утилита проверяет, есть ли в текущем шаблоне файл system.php. Если нет, создает в текущем шаблоне файл с расширением *.tpl. Если есть, зачитывает из него расширение для будущего файла. Предупреждение. Если файл system.php обнаружен, и расширение для файла-шаблона успешно зачитано, файл-шаблон сгенерируется, но его содержание будет "как для Смарти". В этом случае у Вас могут быть траблы с новым компонентом, когда Вы попытаетесь открыть его в браузере. В этом случае Вам придется открыть текст файла-шаблона и… ручками, ручками… создать текст под свой шаблон. А то разбаловал я Вас!
4. Утилита создает языковые файлы в папке language/ru, если русский язык выбран в качестве языка интерфеса при создании сайта. Если выбран английский, файлы создаются в папке language/en и так далее. Предупреждение. Файлы создаются с русскими значениями, поэтому, если хотите английского, открывайте их редактором и… ручками, ручками.
5. Исправлены мелкие ошибки

Если возникли проблемы

Найдите и раскомментируйте строчку
  1. echo "ERROR ".mysql_errno()." ".mysql_error()."\n";
Если при обращении из утилиты к БД сайта возникли траблы, эта строчка позволит Вам узнать, в чем дело.

Хотя, я полагаю, если Вы взялись писать компонент, проблем у Вас быть не должно, а если они появились, Вы должны уметь справится с ними самостоятельно.

Как скачать

Скачать можно тут.

Куда говорить спасибо

яд 410011913797936
wmr 342960323367

Удачи в программировании.
0
omax47 omax47 9 лет назад #
Нет возможности посмотреть вашу утилиту, поэтому спрошу. Как я понимаю вы автоматизируете создание файлов компонента ( frontend, router, model), связываете их и добавляете запись в бд? Или я что-то не правильно понял?
+5
Странник Странник 9 лет назад #
Да. Создается пустой компонент, без действий, оболочка или болванка, если угодно. "Рыба", как говорят студенты. Открываете файлы редактором и дописываете действия.
+1
omax47 omax47 9 лет назад #
Теперь все стало ясно. Спасибо вам. Лично для меня ваша разработка будет полезной. Тоже сталкивался с этой рутиной при создании компонента, но как-то в голову не ериходило автоматизировать этот процесс. +
0
Azura Azura 9 лет назад #
Очень интересно... А что генерируется-то? Можно поподробнее? выборку какую-то можно сделать с помощью него? :)
0
Странник Странник 9 лет назад #
Нет. Генерируются именно файлы и папки - структура компонента. Выборку из БД и обработку и представление информации на страницах - это уже сами, ручками, ручками, ручками.
0
Странник Странник 9 лет назад #
Если угодно, можете почитать тут. Я просто автоматизировал то, что в статье создается руками.
0
Странник Странник 9 лет назад #
Рекомендую всем, кто скачал у меня утилиту "Генератор компонента", скачать у меня более свежую версию.
0
fortunato fortunato 9 лет назад #
Отличная вещь) для новичка как я))
Вопрос, я поставил генератор модуля все ок
Генератор компонента, создал всю структуру нормально (кстати пока не поставил папкам 777 не создавал файлы)
Но при открытии компонента, в пункте меню...выдает ошибку 404
версия инстант 1.10.1
+2
Странник Странник 9 лет назад #
Надеюсь, создаете новый модуль/компонент на локальном сервере. Потому что на локальном сервере с правами ничего делать не надо. Утилита не создавалась для работы на удаленом сайте (просто потому что на удаленном сайте писать и отлаживать компонент/модуль очень неудобно). По этой же причине утилита не содержит защитных механизмов, например, от sql-инъекций. Назначение утилиты - избавить вас от рутины при написании компонента/модуля на локальном сайте. Поэтому, если вы залили утилиту на удаленый сервер - немедленно сотрите ее оттуда!

По поводу 404 ошибки могу предположить, что вы, создав пункт меню, не "нацелили" его на вновь созданный компонент. Зайдите еще раз в админку и внимательно посмотрите, какое действие вы пункту меню назначили. В инструкции об этом подробно сказано.
0
fortunato fortunato 9 лет назад #
ой тупанул...дал имя для компонента с подчеркиванием)) юрл таким не может быть...
0
Странник Странник 9 лет назад #
Так что, все получилось?
+1
fortunato fortunato 9 лет назад #
да отлично) все получилось спасибо...
мой первый компонент уже в работе)) и модуль...
получается вроде, все оказывается легко))
+2
Странник Странник 9 лет назад #
Рад за Вас - для того утилита и писалась - для выполнения рутины.
Удачи в программировании, не забудте нас порадовать своими произведениями!
+1
Странник Странник 9 лет назад #
Модифицировал утилиту для iSMS v1.10.3.
Забирайте из моего профиля, кому надо.
0
Lora Lora 8 лет назад #
Здравствуйте. Вопрос не имеет прямого отношения к утилите,но я спрошу здесь. smile
Подскажите, какие ещё нужны условия для вывода данных в if ($do = 'view'), кроме $do = $inCore->do;
0
Странник Странник 8 лет назад #
Код PHP:
  1. $inCore = cmsCore::getInstance();
  2. $do = $inCore->do;
  3. if ($do = 'view'){бла-бла-бла}
Мой вам совет - изучите все-таки php и объектно-объективное программирование. В этом случае перестанете метод называть функцией, а данные переменными. И не будет вот таких вопросов, какой вы сейчас задали.
+1
Lora Lora 8 лет назад #
Спасибо,Странник.
+1
Баха Баха 8 лет назад #
Ставлю плюс +
0
VopisUVD VopisUVD 8 лет назад #
Под 1.10.4 обновление требуется?
+1
Странник Странник 8 лет назад #
Насколько могу судить, у 1.10.4 структура компонента точно такая же, как и у 1.10.3. Поэтому, полагаю, утилиту можно использовать для генерации компонента и на 1.10.4 тоже.

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

Спасибо.
+2
zan zan 8 лет назад #
Опробовал утилиту на 1.10.6. Это работает smile Правда, задача была довольно узкой - клонирование компонента. Тем не менее, своей цели я достиг, за что автору соответствующее спасибо отправил smile .
Маленькая шероховатость: если префикс таблицы не cms, а любой другой (например, xxx), то генератор генерирует во фронтенд $model = new xxx_model_info();. А там нужно иметь $model = new cms_model_info();. В результате после привязки к пункту меню появляется Fatal error. Оно, конечно, сразу правится руками, но для полной красоты можно эту мелочь и пофиксить.
+1
Странник Странник 8 лет назад #
Спасибо огромное за замечание, пофиксил в исходном коде генератора, сейчас выложу для скачивания
0
Raiden Raiden 8 лет назад #
Ждём-с! dance
0
Странник Странник 8 лет назад #
+1
Нил™ Нил™ 5 лет назад #


Пять звёзд.)
Спасибо, счас попробуем запихнуть то что надо в компонент.

Еще от автора

Адаптация компонента "Закладки" от 19 января 2011 к коробочной версии 1.10.7
На форуме появилась тема с пожеланиями адаптировать довольно старый компонент "Instant Bookmarks" Fuze к современным реалиям.
Утилита "Садовод" для версии InstantCMS 1.10.7.008
В этой краткой заметке описывается утилита "Садовод" для ремонта деревьев версии InstantCMS 1.10.7.008.
Изменение компонента "Баннеры" для будущей  версии 1.10.7.008
Данная статья рассказывает всем ждущим новую версию 008, что нового ожидается в будущем релизе версии 1.10.7.008.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.