UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: psw2020 от 25 Декабря 2015, 14:10:41

Название: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: psw2020 от 25 Декабря 2015, 14:10:41
Есть 2 макроса, 1 тащит напрямую из БД значение, второй пытается это значение сложить с еще некоторым значением. Во втором макросе пытаюсь вызвать первый %custom getValue(param1,param2)%, но со сложением ничего не выходит, т.к. вызов является строкой а не вернувшимся значением, т.е. сначала интерпретируется php код, а только потом макрос  :(. Как можно это правильно реализовать?
Название: Re: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: crazygeorgio от 27 Декабря 2015, 23:51:49
а в чем сложность сделать один макрос из двух???
Название: Re: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: psw2020 от 28 Декабря 2015, 11:07:55
а в чем сложность сделать один макрос из двух???
в том, что зачем дублировать функционал? и вопрос все таки стоит в вызове макроса из макроса, а не в их количестве.
Название: Re: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: crazygeorgio от 28 Декабря 2015, 14:55:43
тогда опишите суть проблемы более понятным языком с примером кода и что получается на выходе, из того что вы написали вообще мало что понятно...
Название: Re: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: psw2020 от 28 Декабря 2015, 15:07:57
тогда опишите суть проблемы более понятным языком с примером кода и что получается на выходе, из того что вы написали вообще мало что понятно...

Макрос получающий значение, в данном случае стоимость услуг.
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)%", а не результату выполнения макроса.
Название: Re: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: crazygeorgio от 28 Декабря 2015, 15:25:06
аааа, так вы прямо в коде метода вызываете)))

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

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

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

$ololo = $this->getToBasePrice($complectationId, 15, 'c');
Название: Re: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: psw2020 от 28 Декабря 2015, 15:26:49
аааа, так вы прямо в коде метода вызываете)))

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

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

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

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

Рад что мы пришли к взаимопониманию)) позже протестирую - отпишусь ;)
Название: Re: Вызов макроса в макросе. Порядок интерпретации.
Отправлено: psw2020 от 28 Декабря 2015, 16:53:22
Получилось методом $ololo = $this->getToBasePrice($complectationId, 15, 'c'); crazygeorgio спасибо за помощь ;)