Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - psw2020

Страницы: [1]
1
Разобрался =)
В /webforms/class.php в функции send() после строки $oMail->setFrom($aMessage['from_email_template'], $aMessage['from_template']); добавить $oMail->addReplyTo('адрес_почты', 'имя_получателя');

Тему не удаляю, может кому пригодится ;)

2
Всем привет! Как добавить ко всем письмам уходящим через модуль обратной связи заголовок Reply-to?
В классе umiMail есть функция addReplyTo.
Пробовал добавить в /webforms/class.php в функции post() $someMail->addReplyTo("почта", "имя"); не помогло... Кто-нибудь сталкивался с подобным?

3
Если используете xslt-шаблонизатор, то можете вызвать макрос вида udata://модуль/метод/?transform=путь к шаблону.xsl&template_id=id шаблона

В принципе, можете к любой странице добавить ?template_id=id шаблона, и получить ее отображение в другом шаблоне.

также если используется TPL шаблонизатор в новом формате хранения шаблонов вызов будет такой /udata/модуль/метод/?transform=папка_с_шаблоном&template_id=id_любого_шаблона_из_этой_папки.
Пример: /udata/content/getReviewList/?transform=/templates/RR&template_id=68

4
Получилось методом $ololo = $this->getToBasePrice($complectationId, 15, 'c'); crazygeorgio спасибо за помощь ;)

5
аааа, так вы прямо в коде метода вызываете)))

методы внутри других методов вызываются как-то так

$custom = cmsController::getInstance()->getModule($macros['custom']);
$ololo = $custom->getToBasePrice($complectationId, 15, 'c');

если сам метод getToBasePrice в кастомс, то наверное можно и так

$ololo = $this->getToBasePrice($complectationId, 15, 'c');

Рад что мы пришли к взаимопониманию)) позже протестирую - отпишусь ;)

6
тогда опишите суть проблемы более понятным языком с примером кода и что получается на выходе, из того что вы написали вообще мало что понятно...

Макрос получающий значение, в данном случае стоимость услуг.
public function getToBasePrice($complectationId, $kmCount, $toType){
$basePrice = 0;
$dopPrice = 0;

if($toType == "m"){$dopPrice = 990;}
if($toType == "f"){$dopPrice = 990 + 1850;}

$dopPriceCUV = 0;
$CUVArray = array(1,2,3,16,17,37,38,39,40,41,42);
$searchCUV = array_search($complectationId, $CUVArray);

if($searchCUV !== false && $toType == "f"){$dopPriceCUV = 400;}

$getBasePriceQuery = mysql_query("SELECT to".$kmCount." FROM renaultToPrice WHERE complectationId = ".$complectationId."");
while ($getBasePrice = mysql_fetch_array($getBasePriceQuery)){
$basePrice = $getBasePrice[0];
}

return $basePrice + $dopPrice + $dopPriceCUV;
}

Пытаюсь вызвать его в другом макросе:
$ololo="%custom getToBasePrice(".$complectationId.",15,c)%";
return $ololo+ 111;

Если не производить с этой переменной никаких действий (сложение, вычитание и т.д.) то значение нормально возвращается. Но если попытаться сложить её с чем либо то ничего не выходит, т.к. вызов этого макроса еще не интерпретировался и равен строке "%custom getToBasePrice(".$complectationId.",15,c)%", а не результату выполнения макроса.

7
а в чем сложность сделать один макрос из двух???
в том, что зачем дублировать функционал? и вопрос все таки стоит в вызове макроса из макроса, а не в их количестве.

8
Есть 2 макроса, 1 тащит напрямую из БД значение, второй пытается это значение сложить с еще некоторым значением. Во втором макросе пытаюсь вызвать первый %custom getValue(param1,param2)%, но со сложением ничего не выходит, т.к. вызов является строкой а не вернувшимся значением, т.е. сначала интерпретируется php код, а только потом макрос  :(. Как можно это правильно реализовать?

9
Думаю в этом примере корректны оба варианта

10
Для этого нужно будет создать обработчик события отправки сообщения для  формы обратной связи, запрос к API сервиса ePochta (не сочтите за рекламу), и JS обработчик для поля номера телефона в форме обратной связи на стороне клиенты (для придания номеру телефона корректного формата).

Итак добавляем обработчик события отправки сообщения:
В файле /classes/modules/webforms/custom_events.php пишем код:
<?php
 $oAddWebformSms = new umiEventListener("webforms_post", "webforms", "SendSMS");
?>

Готовим запрос к API в следующем формате:
$params ['version'] ="3.0"; // Версия API
$params ['action'] = "sendSMS"; // Метод к которому обращаемся
$params ['key'] = ""; //Публичный ключ (предоставляется сервисом)
$params ['sender'] = "Test"; //Имя отправителя SMS
$params ['text'] = "Спасибо за заявку"; //Текст сообщения
$params ['phone'] = "+79871234567"; //Номер телефона на который отправляем (формат обязателен)
$params ['datetime'] = ""; //Время для отложенной отправки, пустой параметр - моментальная отправка
$params ['sms_lifetime'] = "0"; // Время жизни сообщения, 0 - максимальное время
$params ['type'] = "2"; // 2 - отправка от имени 'sender, 3 - отправка с произвольного номера сервиса
ksort ($params); //Сортировка параметров, обязательна для создания котрольной суммы
$sum='';
foreach ($params as $k=>$v)
$sum.=$v; // Конкатенация значений
$sum .= $privateKey; //Конкатенация значений с приватным ключом (предоставляется сервисом)
$control_sum =  md5($sum); // Получение контрольной суммы запроса
$params ['sum'] = $control_sum; //Запись контрольной суммы для отправки

В файле /classes/modules/webforms/__custom.php Добавляем макрос:
public function SendSMS(iUmiEventPoint $oEventPoint) {

$thisFormId = $oEventPoint->getParam("form_id", $iFormTypeId); //Записываем в переменную ID формы связи, т.к. для отправки смс будем использовать конкректную форму

if($thisFormId="902"){ //Проверка - та ли это форма? В моем случаем ID формы 902.

$phoneNumber = $_REQUEST['data']['new']['nomer_telefona']; //Записываем в переменную номер телефона переданный из формы обратной связи по её текстовому идентификатору, в моем случае это 'nomer_telefona'

/*Параметры что мы подготовили ранее*/
$params ['version'] ="3.0";
$params ['action'] = "sendSMS";
$params ['key'] = "";
$params ['sender'] = "Test";
$params ['text'] = "Спасибо за заявку";
$params ['phone'] = $phoneNumber; //Подставляем номер телефона из формы
$params ['datetime'] = "";
$params ['sms_lifetime'] = "0";
ksort ($params);
$sum='';
foreach ($params as $k=>$v)
$sum.=$v;
$sum .= $privateKey;
$control_sum =  md5($sum);
$params ['sum'] = $control_sum;

/*Посылаем запрос к API*/
$url = 'http://atompark.com/api/sms/3.0/sendSMS';
$result = file_get_contents($url, false, stream_context_create(array(
    'http' => array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query($params)
    )
)));
};

    return true;
  }

Осталось только придать номеру телефону нужный формат на стороне клиента, для это я использовал плагин jQuery Mask:
<script>
$(document).ready(function(){
$('[name="data[new][nomer_telefona]"]').focusin(function(){
$('[name="data[new][nomer_telefona]"]').mask('+70000000000',{placeholder: "+79871234567"});
})
});
</script>

Вот и всё, отныне отправитель сообщения через форму с ID 902, будет получать SMS сообщение. Подробнее про работу плагина и API сервиса можно почитать в интернетах ;)

11
Обращение к кастомному макросу средствами AJAX производится через протокол  /udata/custom/ . Разберем простой пример сложения двух чисел в кастомном макросе (данные будут переданы через AJAX).

Итак в файле /classes/modules/custom.php пишем новую функцию:
public function ajaxTest(){
$result = $_POST['param1'] + $_POST['param2'];
echo $result;
exit();
}

Далее пишем JS код для отправки данных макросу (я работаю с jQuery)
function sendData() {
$.post(
  "/udata/custom/ajaxTest", //Пусть к макросу
  {
    param1: 10, //Передаваемые параметры
    param2: "4"
  },
  onSuccess //Функция которая будет выполнена по завершению запроса
);
 
function onSuccess(data) //Сама функция
{
  alert("Сумма: " + data);
}
};

И соответственно HTML код для вызова функции
<a href="#" onclick="sendData()">Ткни меня!</a>

P.S. надеюсь информация будет кому-то полезна  ;)

Страницы: [1]