Надеюсь нижеописанное будет полезно. По крайней мере оно нашло применение в двух проектах.
Итак, в чем же суть? Иногда бывает "полезно" запретить пользователю оплачивать заказ с внутреннего счета, если у него сумма меньше определенной, или, что бывает чаще, если сумма на счете позволяет полностью погасить заказ. Если вам это не надо, то дальше можно не читать.
[spoiler]
Я думал как решить эту задачу путем меньшего сопротивления. И, как мне кажется, нашел очень простое и красивое решение.
1. Копируем шаблон компонента оформления заказа (sale.order.full).
2. В папку шаблона кидаем файл .parameters.php такого содержания:
Я очень люблю lang-файлы, многие называют меня параноиком.
Вот значения lang-ключей:
3. В нашей папке шаблона есть несколько файлов шагов вида step1.php, step2.php, ...
Идем в step4.php. И там, в самом верху, дописываем:
Вот собственно и все. Заходим в настройки компонента в режиме редактирования сайта и видим волшебные настройки:
UPD:
Забыл еще главный момент дописать. В вышеозвученном файле step4.php Надо воткнуть еще строчку:
Но чтобы до конца быть правильным, надо немного изменить блок, начинающийся с
Должно получиться примерно следующее:
Зеленым маркером помечено добавленное.
Итак, в чем же суть? Иногда бывает "полезно" запретить пользователю оплачивать заказ с внутреннего счета, если у него сумма меньше определенной, или, что бывает чаще, если сумма на счете позволяет полностью погасить заказ. Если вам это не надо, то дальше можно не читать.
[spoiler]
Я думал как решить эту задачу путем меньшего сопротивления. И, как мне кажется, нашел очень простое и красивое решение.
1. Копируем шаблон компонента оформления заказа (sale.order.full).
2. В папку шаблона кидаем файл .parameters.php такого содержания:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arTemplateParameters = array( "SHOW_PFA_IF" => Array( "NAME" => GetMessage("SHOW_PFA_IF"), "TYPE" => "LIST", "VALUES" => array( "ALWAYS" => GetMessage("SHOW_PFA_ALWAYS"), "SUFFICIENT" => GetMessage("SHOW_PFA_SUFFICIENT"), "MORE_OR_EQUAL" => GetMessage("SHOW_PFA_MORE_OR_EQUAL"), ) ), "MIN_ACCOUNT" => Array( "NAME" => GetMessage("MIN_ACCOUNT"), "TYPE" => "STRING", "DEFAULT" => "" ) ); ?> |
Я очень люблю lang-файлы, многие называют меня параноиком.
Вот значения lang-ключей:
<? $MESS ['SHOW_PFA_IF'] = "Выводить \"Оплатить со счета\" только если"; $MESS ['SHOW_PFA_ALWAYS'] = "всегда"; $MESS ['SHOW_PFA_SUFFICIENT'] = "сумма на счете достаточна"; $MESS ['SHOW_PFA_MORE_OR_EQUAL'] = "сумма на счете больше либо равна"; $MESS ['MIN_ACCOUNT'] = "Сумма на счете для контроля (пред. опция)"; ?> |
3. В нашей папке шаблона есть несколько файлов шагов вида step1.php, step2.php, ...
Идем в step4.php. И там, в самом верху, дописываем:
<? if ($arResult["PAY_FROM_ACCOUNT"] == "Y") { if ($arParams["SHOW_PFA_IF"] == "SUFFICIENT") { if ($arResult["POST"]["ORDER_PRICE"] <= intval($arResult["USER_ACCOUNT"]["CURRENT_BUDGET"])) { $arResult["PAY_FROM_ACCOUNT"] = "Y"; } else { $arResult["PAY_FROM_ACCOUNT"] = "N"; } } if ($arParams["SHOW_PFA_IF"] == "MORE_OR_EQUAL") { if (intval($arParams["MIN_ACCOUNT"]) <= intval($arResult["USER_ACCOUNT"]["CURRENT_BUDGET"])) { $arResult["PAY_FROM_ACCOUNT"] = "Y"; } else { $arResult["PAY_FROM_ACCOUNT"] = "N"; } } } ?> |
Вот собственно и все. Заходим в настройки компонента в режиме редактирования сайта и видим волшебные настройки:
UPD:
Забыл еще главный момент дописать. В вышеозвученном файле step4.php Надо воткнуть еще строчку:
<input type="hidden" name="PAY_CURRENT_ACCOUNT" value="N"> |
Но чтобы до конца быть правильным, надо немного изменить блок, начинающийся с
if ($arResult["PAY_FROM_ACCOUNT"]=="Y") |
Должно получиться примерно следующее:
if ($arResult["PAY_FROM_ACCOUNT"]=="Y";) { ?> <input type="hidden" name="PAY_CURRENT_ACCOUNT" value="N"> <input type="checkbox" name="PAY_CURRENT_ACCOUNT" id="PAY_CURRENT_ACCOUNT" value="Y"<?if($arResult["PAY_CURRENT_ACCOUNT"]!="N";) echo " checked";?>> <label for="PAY_CURRENT_ACCOUNT"><b><?echo GetMessage("STOF_PAY_FROM_ACCOUNT";)?></b></label><br /> <?=GetMessage("STOF_ACCOUNT_HINT1";)?> <b><?=$arResult["CURRENT_BUDGET_FORMATED"]?></b> <?echo GetMessage("STOF_ACCOUNT_HINT2";)?> <br /><br /> <? } [COLOR=#009900] else { ?><input type="hidden" name="PAY_CURRENT_ACCOUNT" value="N"><? } [/COLOR] |
Зеленым маркером помечено добавленное.