Jump to content
Sign in to follow this  
aplayer

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

Recommended Posts

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

 

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

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

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

Share this post


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

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

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

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

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

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

 

 

Share this post


Link to post
Share on other sites

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

image.png.c95778357885058062aa1a0526fae2e8.png

Share this post


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

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

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

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

Share this post


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

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

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

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

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

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

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

Share this post


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

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

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

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

 

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

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

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

Share this post


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 сказал:

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

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

Share this post


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, но я не собираюсь ничего расширять.

 

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

 

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

 

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

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

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

Share this post


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

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

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

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

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

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

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

Share this post


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

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

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

 

 

Share this post


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}}

 

Share this post


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% полезной мощности.

Share this post


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

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


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

чем не класс? Готовый.

я думал будет что-то типа \IPS\Helpers\Form\GetGroupsForm

Но одной строчкой тут не обойтись.

Share this post


Link to post
Share on other sites

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

Share this post


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

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

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

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

Share this post


Link to post
Share on other sites

Подскажите как записывать иноформацию вот в эту колонку как показано на скрине:

Админка-Пользователь-крайняя правая колонка:

Screenshot_20190314_182007.thumb.png.6f2c3b0a7529ba927aa745637920ba76.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×