Добавить пользователя в рассылки AcyMailing через свою форму
Если есть своя форма (какая-нибудь Обратная связь), автоматически подписать пользователя на рассылки AcyMailing.
За основу было взято руководство по интеграции в компонент BreezingForms BREEZINGFORMS AND ACYMAILING из офф. документации AcyMailing. С той разнице, что нужные рассылки будут указаны в параметрах модуля.
Это не инструкция, просто как делалось себе, чтоб потом не вспоминать! Но постараюсь прокомментировать всё!
У меня Ajax модуль, т.е. отдельно форма (шаблоны форм), небольшой скрипт и один хэлпер для обработки форм. До acymailing так было просто удобнее.
А минус в том, что т.к. хэлпер один за вех, в форме пришлось делать скрытое поле с id рассылок.
Как делалось.
В XML файле модуля в параметры добавил подключение параметров acymailing ( addfieldpath="/components/com_acymailing/params" ), чтобы можно было выбирать рассылки (просто подсмотрел в штатном модуле acymailing). Так же добавил поля для выбора рассылок по примеру того же модуля. Интересно, что если компонент не установлен, система даже не ругается, просто перестает работать поле с выбором рассылок.
<fields name="params" addfieldpath="/components/com_acymailing/params"> <fieldset name="basic">
...
<field name="subscription" type="radio" class="btn-group" default="0" label="Подписать на рассылки com AcyMailing" description="Должен быть установлен и настроен компонент AcyMailing. Пользователь будет подписан на все выбранные рассылки, без возможности выбора."> <option value="1">JYES</option> <option value="0">JNO</option> </field> <field name="listschecked" type="lists" default="All" label="LISTS_CHECKED_DEFAULT" description="The selected lists will be checked by default on your module if they are visible." showon="subscription:1" />
...
</fieldset> </fields>
С XML на этом всё.
В самой форме у меня два скрытых поля: одно с тем, что в модуле выбрано подписать на рассылку из параметров (field name="subscription"), второе с ID рассылок (выводит номера через запятую или «All» - все рассылки).
В общем перед отправкой формы есть две переменные:
$subscription = 1; // - Подписать $subs_list = '1,2,3,'; // Или 'All' - на какие рассылки
Обработка формы.
В документации AcyMailing показано только как вручную в коде указать нужные рассылки, что не удобно, возьмём id рассылок из параметров своего модуля и немного поправим их пример. Комментарии по ходу:
if (isset($subscription)) { //Если в параметрах модуля выбрано подписать на рассылки if(!include_once(rtrim(JPATH_ADMINISTRATOR, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_acymailing'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'helper.php')){ //проверям на существование и подключаем return '<p class="warn">Не существует файла com_acymailing</p>'; } $myUser = new stdClass(); $myUser->email = strip_tags($subs_mail); //Please replace email_field by your own field name (the name of the field "email"). $myUser->name = strip_tags($subs_name); //Please replace name_field by your own field name (the name of the field "name"). $subscriberClass = acymailing_get('class.subscriber'); $subid = $subscriberClass->save($myUser); //$subscriberClass->sendConf($subid); //we send the confirmation email... only if needed based on the current user status and the option from the Acy configuration page. // START Код из штатного модуля AcyMailing, нужен чтобы узнать ID всех созданный активных рассылок, если в параметрах модуля выбрано "All" - все рассылки $listsClass = acymailing_get('class.list'); $allLists = $listsClass->getLists('listid'); foreach($allLists as $oneList){ if($oneList->published){ $visibleListsArray[] = $oneList->listid; // ID всех рассылок } } $checkedLists = $subs_list; // $subs_list - своя переменная, чтоб не портить ориг. код if(strtolower($checkedLists) == 'all'){ $checkedListsArray = $visibleListsArray; // Все активные рассылки }elseif(strpos($checkedLists, ',') OR is_numeric($checkedLists)){ $checkedListsArray = explode(',', $checkedLists); // Id выбранных рассылок }else{ $checkedListsArray = array(); } // END Код из штатного модуля //$subscribe = array(1,4,5); //Specify here the ID of your lists separated by a comma, in this example the user will be subscribed to lists IDs 3,4 and 5. $subscribe = $checkedListsArray; // Подставляем выбранные в параметрах модуля $newSubscription = array(); if(!empty($subscribe)){ foreach($subscribe as $listId){ $newList = array(); $newList['status'] = 1; $newSubscription[$listId] = $newList; } } $subscriberClass->saveSubscription($subid,$newSubscription); }