Какой тип плагина лучше использовать?

  • 19 Ответов
  • 388 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Онлайн effrit

  • *****
  • 7589
  • [+]822 / [-]7
  • Пол: Мужской
  • effrit.com
    • Просмотр профиля
    • effrit.com
Всем привет!
Делаю плагинчик генерации оглавления на основе заголовков страницы.
Сейчас он типа content и срабатывает только на статье, т.е. 1 раз - это норм.

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

Вопрос - как это лучше реализовать?
Не разрешать повторный запуск или сменить тип плагина на системный?
И какое событие вообще оптимально для такого?

*

Оффлайн b2z

  • *****
  • 7740
  • [+]739 / [-]0
  • Пол: Мужской
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit
Цитировать
сменить тип плагина на системный?
Это ещё хуже - будет срабатывать при каждом чихе. Ну если только в самом плагине не добавить условие.

*

Онлайн effrit

  • *****
  • 7589
  • [+]822 / [-]7
  • Пол: Мужской
  • effrit.com
    • Просмотр профиля
    • effrit.com
дык вот я про это и думаю - какое из меньших зол выбрать :)
в идеале нужно что-то типа "запустить 1 раз после отрисовки страницы"

а если в контентном делать условие на повторный запуск не подскажешь условие?

*

Оффлайн b2z

  • *****
  • 7740
  • [+]739 / [-]0
  • Пол: Мужской
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit
а если в контентном делать условие на повторный запуск не подскажешь условие?
Ну можно попробовать в свойстве хранить значение, типа:

Код: (php) [Выделить]
private $done = false;

if ($done === true)
{
return;
}

// сделали дело
$this->done = true;

Правда не уверен, что сработает.

*

Оффлайн Septdir

Всем привет!
Делаю плагинчик генерации оглавления на основе заголовков страницы.
Сейчас он типа content и срабатывает только на статье, т.е. 1 раз - это норм.

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

Вопрос - как это лучше реализовать?
Не разрешать повторный запуск или сменить тип плагина на системный?
И какое событие вообще оптимально для такого?
А почему ты не хочешь его в модуль засунуть. А сам скрипт подключать в хед один раз через addscript . Так можно выводить несколько блоков навигации
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты: Сайт | skype:septdir | Telegram | VK | Facebook | Twiter | Все контакты

*

Онлайн dmitry_stas

хранить в приватном свойстве - сработает
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Онлайн effrit

  • *****
  • 7589
  • [+]822 / [-]7
  • Пол: Мужской
  • effrit.com
    • Просмотр профиля
    • effrit.com
да, нашел ещё пример с объявленным статиком, так что оставлю контентный.
модуль не подходит, т.к. часть гибкости потеряется - плагин универсальнее.
всем спасибо )

*

Оффлайн b2z

  • *****
  • 7740
  • [+]739 / [-]0
  • Пол: Мужской
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit

*

Онлайн dmitry_stas

работает

private $done = false;
 
public function blabla() {
    if ($this->done === true)
    {
return;
    }
    $this->done = true;
 
    // этот код будет выполнен 1 раз
    ....
}
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций


*

Оффлайн Septdir

модуль не подходит, т.к. часть гибкости потеряется - плагин универсальнее.
Ну дело конечно твое, но ИМХО модуль в данном случае гибче по ряду причин.
1. Можно без труда привязывать к определенным страницам.
2. Можно выводить блок несоклько раз. К примеру один в сайдбаре другой в мобильном блоке (ofcanvas к примеру)
3. Модуль не привязан к комопнентам. В отличае от плагина, где нужного content может и не быть
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты: Сайт | skype:septdir | Telegram | VK | Facebook | Twiter | Все контакты

*

Онлайн effrit

  • *****
  • 7589
  • [+]822 / [-]7
  • Пол: Мужской
  • effrit.com
    • Просмотр профиля
    • effrit.com
аааа! чукча тупой. не работает через private  у меня ))

вот так получилось:

static $done = false;
if ($done) return;
$done = true;

Septdir ну, скажем, есть свои плюсы и минусы тоже есть :)

*

Онлайн dmitry_stas

ну как не работает? работает. что то не так делаете.

P.S. приватное свойство класса используете? именно как я написал - с $this ? потому что если просто переменная в функции приватная - то конечно не будет работать
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций


*

Онлайн dmitry_stas

ну ок :) просто интересно, почему не работает. только что проверил у себя - работает. ну да ладно
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций


*

Оффлайн robert

Что-то у меня ни private, ни static не работает. Только запись в сессию помогла.
Вру, и то, и другое работает.
« Последнее редактирование: 20.12.2016, 19:04:43 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Онлайн effrit

  • *****
  • 7589
  • [+]822 / [-]7
  • Пол: Мужской
  • effrit.com
    • Просмотр профиля
    • effrit.com
public function onContentPrepare( $context, $article, $params ){
static $done = false; // флаг проходов, не даем срабатывать больше 1 раза

if ($done) return;
echo " первый проход ";
$done = true; // код отработан, выставляем флаг для запрета повторного срабатывания в режиме блога, например

}

зы
ну хоть не один я собеседование завалил  ;D

*

Оффлайн Arkadiy

  • *****
  • 5429
  • [+]440 / [-]0
  • Пол: Мужской
  • Крепитесь, други.
    • Просмотр профиля
    • http://argens.ru
А если $done вынести из функции в область класса, то должно и так и так работать, а в функции только static.

*

Онлайн effrit

  • *****
  • 7589
  • [+]822 / [-]7
  • Пол: Мужской
  • effrit.com
    • Просмотр профиля
    • effrit.com
Ну дело конечно твое, но ИМХО модуль в данном случае гибче по ряду причин.
1. Можно без труда привязывать к определенным страницам.
3. Модуль не привязан к комопнентам. В отличае от плагина, где нужного content может и не быть

т.к. переделывать в модуль банально лень, то просто добавил режим ручного запуска по спецтегу.
пишем в модуле с произвольным HTML волшебное слово и генерируем оглавление где угодно :)
фактически получам плюсы и плагина и модуля.
хотя можно было  и наоборот - написать модуль и грузить его внутрь статей.