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

effrit

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

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

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

b2z

  • Support Team
  • 7469
  • 742
  • Разраблю понемногу
Цитировать
сменить тип плагина на системный?
Это ещё хуже - будет срабатывать при каждом чихе. Ну если только в самом плагине не добавить условие.
*

effrit

  • Группа развития
  • 7581
  • 822
  • effrit.com
дык вот я про это и думаю - какое из меньших зол выбрать :)
в идеале нужно что-то типа "запустить 1 раз после отрисовки страницы"

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

b2z

  • Support Team
  • 7469
  • 742
  • Разраблю понемногу
а если в контентном делать условие на повторный запуск не подскажешь условие?
Ну можно попробовать в свойстве хранить значение, типа:

Код: php
private $done = false;

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

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

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

Septdir

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

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

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

dmitry_stas

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

effrit

  • Группа развития
  • 7581
  • 822
  • effrit.com
да, нашел ещё пример с объявленным статиком, так что оставлю контентный.
модуль не подходит, т.к. часть гибкости потеряется - плагин универсальнее.
всем спасибо )
*

b2z

  • Support Team
  • 7469
  • 742
  • Разраблю понемногу
*

dmitry_stas

  • Профи
  • 10043
  • 953
работает

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

effrit

  • Группа развития
  • 7581
  • 822
  • effrit.com
*

Septdir

  • Практически профи
  • 2276
  • 113
  • JoomlaZen
модуль не подходит, т.к. часть гибкости потеряется - плагин универсальнее.
Ну дело конечно твое, но ИМХО модуль в данном случае гибче по ряду причин.
1. Можно без труда привязывать к определенным страницам.
2. Можно выводить блок несоклько раз. К примеру один в сайдбаре другой в мобильном блоке (ofcanvas к примеру)
3. Модуль не привязан к комопнентам. В отличае от плагина, где нужного content может и не быть
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen
*

effrit

  • Группа развития
  • 7581
  • 822
  • effrit.com
аааа! чукча тупой. не работает через private  у меня ))

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

Код
static $done = false;
if ($done) return;
$done = true;

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

dmitry_stas

  • Профи
  • 10043
  • 953
ну как не работает? работает. что то не так делаете.

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

effrit

  • Группа развития
  • 7581
  • 822
  • effrit.com
*

dmitry_stas

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

robert

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

effrit

  • Группа развития
  • 7581
  • 822
  • effrit.com
Код
	public function onContentPrepare( $context, $article, $params ){ 
static $done = false; // флаг проходов, не даем срабатывать больше 1 раза

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

}

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

Arkadiy

  • Группа развития
  • 5350
  • 440
  • Крепитесь, други.
А если $done вынести из функции в область класса, то должно и так и так работать, а в функции только static.
*

effrit

  • Группа развития
  • 7581
  • 822
  • effrit.com
Ну дело конечно твое, но ИМХО модуль в данном случае гибче по ряду причин.
1. Можно без труда привязывать к определенным страницам.
3. Модуль не привязан к комопнентам. В отличае от плагина, где нужного content может и не быть

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

Как при помощи плагина изменить $data до сохраннения?

Автор Septdir

Ответов: 9
Просмотров: 178
Последний ответ 02.06.2017, 17:34:35
от Septdir
Использовать модуль в контроллере кастомного компонента

Автор voron121

Ответов: 5
Просмотров: 208
Последний ответ 16.02.2017, 18:24:16
от voron121
Обращение к модели из плагина

Автор platonische

Ответов: 13
Просмотров: 361
Последний ответ 28.09.2016, 20:32:40
от robert
Вопрос по field XML плагина, а именно по заданию стилей

Автор Владимир_М

Ответов: 0
Просмотров: 221
Последний ответ 30.05.2016, 01:00:55
от Владимир_М
как использовать несколько шаблонов VIEW?

Автор john.deff

Ответов: 11
Просмотров: 387
Последний ответ 27.05.2016, 09:45:38
от john.deff