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

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Всем привет!
Делаю плагинчик генерации оглавления на основе заголовков страницы.
Сейчас он типа content и срабатывает только на статье, т.е. 1 раз - это норм.

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

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

b2z

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

effrit

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

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
а если в контентном делать условие на повторный запуск не подскажешь условие?
Ну можно попробовать в свойстве хранить значение, типа:

Код: php
private $done = false;

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

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

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

Septdir

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

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

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

dmitry_stas

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

effrit

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

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
да, нашел ещё пример с объявленным статиком, так что оставлю контентный.
А без статики не работает?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
работает

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

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
модуль не подходит, т.к. часть гибкости потеряется - плагин универсальнее.
Ну дело конечно твое, но ИМХО модуль в данном случае гибче по ряду причин.
1. Можно без труда привязывать к определенным страницам.
2. Можно выводить блок несоклько раз. К примеру один в сайдбаре другой в мобильном блоке (ofcanvas к примеру)
3. Модуль не привязан к комопнентам. В отличае от плагина, где нужного content может и не быть
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
аааа! чукча тупой. не работает через private  у меня ))

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

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

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

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну как не работает? работает. что то не так делаете.

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

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
*

dmitry_stas

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

robert

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

effrit

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

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

}

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

Arkadiy

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

effrit

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

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

Событие: сохранение настроек плагина

Автор anatol81n

Ответов: 2
Просмотров: 661
Последний ответ 29.01.2021, 07:17:45
от voland
Модуль обратной связи. Как использовать свойство context в ajax запросе

Автор ushangi

Ответов: 0
Просмотров: 480
Последний ответ 15.02.2020, 22:08:12
от ushangi
Как создавать в админке раздел для изменения настроек плагина?

Автор lculver

Ответов: 2
Просмотров: 597
Последний ответ 21.05.2018, 08:55:46
от dmitry_stas
На кого лучше оставлять замену подстроки: на БД или php?

Автор borro

Ответов: 5
Просмотров: 579
Последний ответ 11.10.2017, 10:50:02
от borro
Как при помощи плагина изменить $data до сохраннения?

Автор Septdir

Ответов: 9
Просмотров: 805
Последний ответ 02.06.2017, 17:34:35
от Septdir