Jump to content

Создание плагина


Recommended Posts

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

 

40 минут назад, WaNted сказал:

dev/setup/install.php можете там намудрить с созданием своего php-файла. Чтобы во время установки создавался файл с нужным содержимым.

Кстати, многие разработчики, используя возможности класса ips_plugins_setup_install, даже не подозревают о возможности, а часто и необходимости удаления созданных с его помощью ресурсов (файлов, таблиц, полей, строк...), при деинсталяции плагина.  Я и сам далеко не сразу узнал о файле uninstall.php создаваемом в корневой папке плагина.

Link to post
Share on other sites
  • Replies 94
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

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

Там вообще ничего не нужно городить и вообще лезть редактировать этот файл в ручную. При создании Theme Hook достаточно в содержимом указать свой шаблон типа: {template="templateName" group="plugi

Если это хук модуля profile.php то $this->member

Posted Images

41 минуту назад, siv1987 сказал:

Инклуды это дичь, и не знаю чем это спасет ситуацю

код шаблонов со скобочками не подсвечивается наверно ни одним редактором. Например netbeans не будет показывать ошибки синтаксиса. Некоторые более простые текстовые редакторы с подсветкой синтаксиса будут наоборот на каждую скобку реагировать как на ошибку и весь код будет подчеркнут красными линиями и восклицательными знаками. Благо тот же netbeans не реагирует как на ошибки.

Так же ни один редактор не выравнивает такой код лесенкой.

Недостатков много.

А с инклюдом, прописал в шаблоне одну строку и пиши весь остальной код в любимом редакторе на обычном php html js css итп.

 

 

Link to post
Share on other sites
1 минуту назад, Desti сказал:

Давным давно правлю код в microsoft code, всё нормально подсвечивается. Вот обычный кусок phtml из dev

на скрине чистый html в котром ips-теги стоят между html-тегами и воспринимаются редактором как обычный текст.

А вот когда дело дойдет до php там редакторы начнут спотыкаться.

Link to post
Share on other sites
57 минут назад, aplayer сказал:

код шаблонов со скобочками не подсвечивается наверно ни одним редактором

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

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

1 час назад, aplayer сказал:

А вот когда дело дойдет до php там редакторы начнут спотыкаться.

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

Link to post
Share on other sites
41 минуту назад, aplayer сказал:

если честно я не понял о чем речь.

Такая же фигня :) тут, по моему, уже никто не понимает, о чем речь :)

после слов "IPS-овский PHP"..

 

7 часов назад, aplayer сказал:

Не хочу городить 1000 строк кода в теле функции hookData()

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

Link to post
Share on other sites
8 часов назад, aplayer сказал:

Не хочу городить 1000 строк кода в теле функции hookData(), а сделать инклюд который сформирует переменную $content.

 

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

 

1 час назад, aplayer сказал:

если честно я не понял о чем речь. Точнее не понял что значит отделить логику от шаблона.

https://ru.m.wikipedia.org/wiki/Model-View-Controller

 

26 минут назад, Desti сказал:

Такая же фигня :) тут, по моему, уже никто не понимает, о чем речь :)

Значит вы не знакомы с паттерными проектирования. 

Link to post
Share on other sites

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

Тот пример создания плагина который тут https://invisioncommunity.com/developers/docs/development/plugins/complete-example-of-a-plugin-in-ips-community-suite-r50/ не открывает всех секретов технологии.

Синтаксис скобочек и шаблончиков мне понятен, не первый раз с подобным сталкивался, но он мне не нравится. Как представлю, что я сейчас начну обработчик post-запросов с проверкой sql-инъекций или сокет на этих скобочках писать буду мне аж дурно становится. Как а анекдоте: "бери лом - иди подметай"

Ну и прикинул самый оптимальный вариант это минимум скобок а основная масса обычного php-кода иклюдится из других файлов.

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

 

Link to post
Share on other sites

Весь основной код пищите в методе hookData(), там где Вы хотели подключить свой инклюд.

Потом можете всё оформить с помощью шаблона, и вывести там же, где у Вас переменная $content.

Link to post
Share on other sites

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

 

6 минут назад, aplayer сказал:

Ну и прикинул самый оптимальный вариант это минимум скобок а основная масса обычного php-кода иклюдится из других 

 

Какие вообще скобки? 

 

9 минут назад, aplayer сказал:

Как представлю, что я сейчас начну обработчик post-запросов с проверкой sql-инъекций или сокет на этих скобочках писать буду мне аж дурно становится.

IPS шагнули далеко в плане инкапсуляции данных в sql запросах. Никаких особых проверок на sql инъекции не требуется, достаточно просто привести тип данных к нужному формату.

Link to post
Share on other sites
1 час назад, siv1987 сказал:

Значит вы не знакомы с паттерными проектирования. 

Это был сарказм, если что.  С IPB плотно с 2006 года :)

1 час назад, aplayer сказал:

Про хуки кода в документации сказано

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

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

Link to post
Share on other sites
8 часов назад, Desti сказал:

Вас пугает синтаксис классов в PHP и прочие новомодные примочки?

да нет не пугает. Я наоборот хочу использовать весь функционал движка на полную катушку. Но писать весь {{ код }} в фигурных скобочках меня угнетает.

 

 

Link to post
Share on other sites
21 минуту назад, aplayer сказал:

да нет не пугает. Я наоборот хочу использовать весь функционал движка на полную катушку. Но писать весь {{ код }} в фигурных скобочках меня угнетает.

 

 

Код пишется в контроллерах и передается методом 

$var = [ 1,2,3 ];

\IPS\Theme::i()->getTemplate( 'global' )->file( (array) $var );

А принимается 

<ips:template parameters="$var" />

{{foreach $var as $v}}
{$v|raw}
{{endforeach}}

 

Link to post
Share on other sites

greykoo в первом сообщении я озвучил примерно то же самое, только без использования phtml-файла. Там я предлагал сразу вывести контент на экран.

Все равно мне такой подход не нравится. Невозможность инклюда многое портит

У инклюдов кроме отрицательных есть и положительные моменты. Например некоторые скрипты можно не загружать и тем самым экономить память и обращения к диску:
 

if($member_group_id == 1){include '1.php';}

if($member_group_id == 2){include '2.php';}

if($member_group_id == 3){include '3.php';}

В этом примере из 3 скрптов загрузится только один.
 

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

if($member_group_id == 1){код скрипта для первой группы;}

if($member_group_id == 2){код скрипта для второй группы;}

if($member_group_id == 3){код скрипта для третьей группы;}

то-есть весь код трех скриптов будет загружен в память, а выполнен только один. Получается  мы загрузили в память 2/3 ненужного кода, а выполнилась только 1/3. Это значит наш код использует всего лишь ~30% полезной мощности.

Link to post
Share on other sites
2 часа назад, aplayer сказал:

Это значит наш код использует всего лишь ~30% полезной мощности.

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

Link to post
Share on other sites
3 часа назад, aplayer сказал:

то-есть весь код трех скриптов будет загружен в память, а выполнен только один. Получается  мы загрузили в память 2/3 ненужного кода, а выполнилась только 1/3. Это значит наш код использует всего лишь ~30% полезной мощности.

Шел 2019 год. Люди пишут фреймворк на ООП, с неймспейсами и трейтами в php а ТС оптимизирует код по количеству строк в файле.
Пишите так, как делают это все, и не занимайтесь херней. С таким подходом вы уже на старте наговнокодите. Если вы не знаете как работает компилятор php не надо заниматься никчемной оптимизации, сосредоточитесь лучше на основную логику вашего скрипта, там я уверен узких мест и так хватает.

Link to post
Share on other sites

Хотя ладно. поглядел уже в других плагинах.

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

Дальше разберусь.

или есть готовый класс?

Link to post
Share on other sites
15 минут назад, Desti сказал:

Напишите 5 строчек кода, сделайте свой класс \IPS\Helpers\Form\GetGroupsForm. Вас не поймешь, то 1000 строк в инклюд - семечки, то 5 строк много и сложно. 

К хорошему быстро привыкаешь. А тут на тебе- целых 5 строчек вместо одной.

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Ваша ссылка была автоматически строена.   Отображать как обычную ссылку

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...