addon_for_thanks_for_posts

Обсуждение новой системы расширения функциональности phpBB 3.3, разработки новых расширений.
Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28
Благодарил (а): 36 раз
Поблагодарили: 97 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение Алг »

Расширение является дополнением к "Thanks for posts by Палыч" и добавляет ajax-функциональность для возможности пользователям раздать/снять 'спасибо' без перезагрузки страницы, а модератором удалить список проголосовавших за пост.
Аддон имеет смысл ставить только в том случае, если вы установили расширение "Thanks for posts by Палыч".
Совместимо с RC2


Репозиторий: https://github.com/alg5/AddonForThanksForPosts
Инсталляция:
Скопируйте всё содержимое репозитория в папку ext/alg/AddonForThanksForPosts/
Перейдите в Панель администратора: АСР-> Персонализация-> Управление расширениями
Включите расширение "addon_for_thanks_for_posts"

Аватара пользователя
rxu
Сообщения: 1116
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Благодарил (а): 84 раза
Поблагодарили: 108 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение rxu »

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

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28
Благодарил (а): 36 раз
Поблагодарили: 97 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение Алг »

Контроллер-да, но Вы же его и меняли и хорошо в этом разбираетесь, джаваскрипт пока не менялся при этих изменениях. При изменении шаблона со стороны движка, изменение джскрипта маловероятно, если Вы в эксте будете менять шаблон, то возможно, придётся менять и скрипт. Уверена на 100%, что в команде есть неплохо знающие клиентские скрипты, помогут поправить код, если я отвалюсь

Отправлено спустя 1 минуту 39 секунд:
И в любом случае, весь мой код можно легко отключить

Аватара пользователя
rxu
Сообщения: 1116
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Благодарил (а): 84 раза
Поблагодарили: 108 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение rxu »

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

Код: Выделить всё

- @gfksx.ThanksForPosts.helper
добавляем

Код: Выделить всё

- @?gfksx.ThanksForPosts.helper
знак вопроса означает, что сервис будет передан в конструктор, если этот сервис существует. Если нет - просто не будет передано ничего, т.е. null.
Соответственно, в конструкторе можно установить для этого сервиса значение по умолчанию, типа

Код: Выделить всё

\gfksx\ThanksForPosts\core\helper $gfksx_helper = NULL
и потом в коде делать проверку, например

Код: Выделить всё

if ($this->gfksx_helper !== NULL)
{
	$this->gfksx_helper->add_notification($thanks_data);
}
Источник: Service Container (The Symfony Book) :: Making References optional

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28
Благодарил (а): 36 раз
Поблагодарили: 97 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение Алг »

пр?

Аватара пользователя
rxu
Сообщения: 1116
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Благодарил (а): 84 раза
Поблагодарили: 108 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение rxu »

ПР это да, по идее, при отсутствии хелпера надо вообще блокировать работу аддона, пока не понял, в какое место return вставить :oops:

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28
Благодарил (а): 36 раз
Поблагодарили: 97 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение Алг »

лучше не return, а

Код: Выделить всё

$this->error[] = array('error' => $this->user->lang['INCORRECT_THANKS']);
или задать новое сообщение об ошибке

Отправлено спустя 8 минут 45 секунд:
нет, лучше и не так.
rxu писал(а):QR_BBPOST в коде делать проверку, например
КОД: ВЫДЕЛИТЬ ВСЁ
if ($this->gfksx_helper !== NULL)
{
   $this->gfksx_helper->add_notification($thanks_data);
}
эта проверка в листенере? Если в нем, то добавьте в темплейт булевскую переменную, а я в шаблоне буду проверять её значение. если не подключён экст, то я не подключаю файл addon_for_thanks_for_posts.js и аддон не будет работать

Аватара пользователя
rxu
Сообщения: 1116
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Благодарил (а): 84 раза
Поблагодарили: 108 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение rxu »

Так-с. В аддоне подключение addon_for_thanks_for_posts.js происходит внутри условия

Код: Выделить всё

<!-- IF S_TOPIC_ID && S_FORUM_THANKS -->
...
<!-- INCLUDEJS addon_for_thanks_for_posts.js -->
<!-- ENDIF -->
Т.е., тогда, ничего делать не надо?

Отправлено спустя 1 минуту 6 секунд:
Хотя нет, такая же переменная есть и в основном эксте, и в аддоне. Кстати, надо ли это? В основном эксте S_FORUM_THANKS определена во вьютопике, в принципе, в аддоне можно вообще от слушателя избавиться тогда.

Отправлено спустя 11 минут 18 секунд:
Попробовал - не вышло почему-то.

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28
Благодарил (а): 36 раз
Поблагодарили: 97 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение Алг »

rxu писал(а):QR_BBPOST <!-- IF S_TOPIC_ID && S_FORUM_THANKS -->
1-е понятно, 2-е я уже забыла, что это. выглядит не очень мнемонически

Аватара пользователя
rxu
Сообщения: 1116
Зарегистрирован: 21 янв 2014, 21:20
Откуда: Krasnoyarsk
Github repo: https://github.com/rxu
Благодарил (а): 84 раза
Поблагодарили: 108 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение rxu »

А потому, что событие шаблона от аддона срабатывает раньше.
Алг писал(а):QR_BBPOST 2-е я уже забыла, что это. выглядит не очень мнемонически
Ага. Это флаг наличия права благодарить в данном форуме.

Алг
Сообщения: 645
Зарегистрирован: 18 фев 2014, 17:28
Благодарил (а): 36 раз
Поблагодарили: 97 раз
Контактная информация:

addon_for_thanks_for_posts

Сообщение Алг »

rxu писал(а):QR_BBPOST А потому, что событие шаблона от аддона срабатывает раньше.
можно задать низший приоритет?

Ответить