Вопрос по блокам в макете

Как вставить php в блок?

если блок с поддержкой smarty и очень-очень уж нужно php - тег сматри {php} {/php}
но возможно его надо будет разрешить в конфиге смарти

Да блок с поддержкой smarty.
{php} {/php} - не сработало.
его надо будет разрешить в конфиге смарти - подскажите как это сделать?

собственно в функции класса смарти используется

eval($content);

кроме того начиная с версии Smarty 3.1, теги {php} доступны только из SmartyBC
он есть в классах ядра, но пока не понял, надо переподключать или нет

Заблокировано в целях безопасности. В php делайте свою функцию и вызывайте ее в блоке

{$result = $arg1|fn_my_function:$arg2:$arg3}

Если это форма?

Дайте больше деталей

Например в блоке(HTML с поддержкой smarty), в макетах, Написана форма, как передать форму в обработчик, если в блоке нельзя писать PHP.

так как обычно? пока не понятна проблема

В func.php допустим написал обработчик. Пользователь заполнил форму, нажал submit и? Как мне вызвать мой обработчик? через action? Туда вставлять функцию?

неее. php работает на сервере, формирует страницу которую получает пользователь. Если надо, чтобы данные формы обрабатывались на странице, то JS. Но как я понимаю, речь идет об отправке формы без перезагрузки страницы и получении результата обработки данных и вставки их в требуемое место.
я в своем модуле истории по заказам сделал так (заменил поле комментария к заказу своим инпутом, при вводе в этом поле по нашатию enter или клику по кнопке форма через ajax отправляется на сервер, обрабатывается, и возвращается ответ, перезаписывая блок с комментариями новым содержимым, уже включающим только что введенный

    <div class="note clearfix" id="staff_only_notes">
        <div class="span12" style="margin-bottom: 6px;">
            <h4>{__("staff_only_notes")}</h4>
            <input class="span11 input" type="text" name="update_order[details]" id="details" value="{$order_info.details}">
            <a class="btn" id="add_admin_comment"><i class="icon-plus"></i></a>     
        </div>
    </div>
</div>
            
{literal}
<script type="text/javascript">

function send_add_admin_comment (id) {
    var url = fn_url('orders.update_order_logs?order_id=' + id + '&details=' + $("#details").val()) ;
        $.ceAjax('request', url, {
            result_ids: 'order_logs'
        });
        $("#details").val('');
//            return false;
}  

Tygh.$(document).ready(function(){    
    Tygh.$(document).on('click', '#add_admin_comment', function(){
        send_add_admin_comment ($("#val_order_id").val());
    });
    Tygh.$('#details').keydown(function(e){
        if(e.which ==13){
            send_add_admin_comment ($("#val_order_id").val());            
        };   
    });
});
</script>
{/literal}

Правильно/неправильно - история рассудит :slight_smile: но работает

1 лайк

Спасибо за ответ. Пригодится!
Но как отправить ajax, или на обработчик через action - это понятно. Я просто для себя хочу понять, если php запрещено. Как отправить данные формы через smarty, как написано в подсказке выше вызвать свою функцию, вот у меня и вопрос как это правильно сделать. Если страница перегрузиться это не важно.

php и смарти - это всё - формирование страницы на сервере.
пользователь в браузере получает чистый html
поэтому данные отправляет просто форма, в любом случае, никакого смарти и php в браузере же нет в помине
html форма отправляет данные на сервер (post, get, ajax или нет)
там данные обрабатываются php
по результату обработки формируется новая страница и отдается пользователю (чистый html)

1 лайк

Идея такая

Форма

<form name="my_form" action="{""|fn_url}" method="post" class="cm-ajax cm-ajax-full-render">
         <input type="text" name="test" />
        <button class="ty-btn ty-btn__primary" type="submit" name="dispatch[my_controller.test]">Submit</button>
</form>

контроллер

app/addons/my_changes/controllers/frontend/my_controller.php

<?php

if (!defined('BOOTSTRAP')) { die('Access denied'); }

if ($mode == 'test') {
    // тут вызывается ваша функция обработки $_REQUEST
}
1 лайк

Спасибо! Это то что я и хотел узнать!

1 лайк