Андрей надо подтянуть знания по формам и работе с массивами.
if (isset($_POST['userfields_arr'])){ //Если нужное поле пришло из запроса
$order['userfields'] = serialize($_POST['userfields_arr']);
}
Вот и всё.
Форум ReadyScript Сообщения от Закусило Александр
Андрей надо подтянуть знания по формам и работе с массивами.
if (isset($_POST['userfields_arr'])){ //Если нужное поле пришло из запроса
$order['userfields'] = serialize($_POST['userfields_arr']);
}
Вот и всё.
Ну так поменяйте его или объедините как
...
name="userfields_arr[моё поле]"
...
name="userfields_arr[моё поле 2]"
Тогда будете ловить переменную userfields_arr которая придёт как массив.
Это же элементарная отправка формы.
Ну у Вас в POST 2 поля приходят. Соответственно, в массиве для сохранения нужно указать 2 поля.
$myarray = array(
'current_val' => $_POST['current_val'],
'name второго поля' => $_POST['name второго поля']
);
Правда есть ещё один момент. $_POST просто мной был использован для примера. Получение из POST лучше сделать системными средствами:
$имяпеременной = \RS\Http\Request::commonInstance()->request('имя переменно POST', TYPE_STRING);
Надеюсь последним кодом Вас не запутаю.
Не за что
Ого, как все сложно ) просто чтобы заменить надпись надо переопределять целый файл? А если в исходном файле появлятся какие то обновления, то получается они не будут работать? Так как будут перекрываться файлом my.inc.php ?
Причём здесь my.inc.php, мы этот вариант уже не рассматриваем. Вам нужно перегрузить шаблон с выводом способа доставки при заказе, чтобы его кастомизировать. Это нормальная практика, для всех магазинов которые хотят сделать под себя. Я правда не знаю, используете ли Вы модуль заказ на одной странице. Если да то там шаблон несколько другой.
Вы меня не поняли.
Вы из POST получаете current_val, а не из заказа. У вас отправляется просто форма с полями и эти поля Вам нужно записать в заказ. Это первый момент. Т.к. у Вас поля добавлены через конфиг модуля магазин, то доп поля храняться в этом случае в сериализованном массиве. Сериализованный массив это массив с ключами в виде name полей и их значениями.
/**
* Действия перез записью заказа в БД
*/
public static function ormBeforeWriteShopOrder ($data) {
/**
* @var \Shop\Model\Orm\Order
*/
$order = $data['orm'];//Получаем объект заказа
$flag = $data['flag'];//флаг
if (isset($_POST['current_val'])){ //Если нужное поле пришло из запроса
$myarray = array(
'current_val' => $_POST['current_val'];
);
$order['userfields'] = serialize($myarray);
}
}
А второй момент это момент с выводом значений. Вы просто в шаблоне у себя прописали поле. А как с выводом бы с выводом значения? Его надо самостоятельно подставлять в Вашем случае. В БД всё сохранится в поле userfields. И будет в сериализованном виде. Однако в заказе (\Shop\Model\Orm\Order т.е. если заглянуть в файл /modules/shop/model/orm/order.inc.php) есть функция afterObjectLoad, которая этот сериализованный массив, рассериализовывает при первой загрузке и в распакованном виде помещает в поле userfields_arr. Его Вы и можете использовать чтобы вывести в нужное поле значение в шаблоне. Для примера в самом шаблоне сделайте после записи
<pre>{var_dump($order.userfields_arr)}</pre>
У вас доставки выводятся в шаблоне
/templates/ВАША ТЕМА/shop/checkout/delivery.tpl
Вам нужно проверить id доставки и если это доставка, которая должна быть рассчитана менеджером, то выдавать другое сообщение в шаблоне. Вы же надпись хотите заменить.
Прощу прощения. Чёт я уже заработался:) Через .my.inc.php сделайте, либо проверьте на id доставки в шаблоне. Я думаю второй вариант более предпочтительный:
{if $item.id=='Мой id доставки'}
{else}
{/if}
После оформления самого заказа в заказе менеджер всё меняет.
А чему $myarray у Вас переменная равна? И почему, если вы отправляете переменную с именем current_val у Вас проверка на $_POST['userfields']?
{$fio=$user->getFio()}
В данном видео показано, как создать простейший административный контроллер на основе уже существующего с системе. Также показано как сделать CRUD контроллер. Как создать API для контроллера. Как создать ORM объект для работы контроллера. Также рассмотрены мельком различные аспекты отображения контроллера.
Видео большое, но полезное.
Вот само видео:
https://www.youtube.com/watch?v=wA-1DK1 … mp;index=8
или видео можете найти у нас на сайте в разделе видеоуроки.
Сроки пока неизвестны, что будет в итоге тоже не раскрою, но работа идёт Всё инкогнито. Следите за обновлениями. Будет статья.
Ааа собрать. У $user есть метод getFio()
{$fio=explode(" ", нужная для разбиения переменная)}
{var_dump($fio)}
Всё как в PHP функция explode
$order = $data['orm']; //Объект заказа
$order['userfields'] = serialize($myarray); //Передаём в дополнительные поля массив. Поля должны быть в сериализованном виде.
$data - это массив приходящий аргументом в хук.
Сейчас у нас ведутся работы в направлении характеристик, мы учтём все Ваши пожелания.
Да, но только в таком порядке
$(document).ready(function(){
//Ваш код инициализации
$("body").on("new-content", function(){
//Ваш код инициализации
});
});
Т.е. сначала инициализируем, то что не в окне, а потом, то что в окне.
Вообще-то когда открывается диалоговое окно, то все скрипты уже подгружжены, иначе бы диалоговое окно бы не открылось, а Вы просто бы перешли бы по ссылке.
Инициализация это не проблема, ведь Вы можете записать Ваш код на готовность всего документа:
$(document).ready(function(){
//Сюда вставить код инициализации маски
});
Только это код надо вставить в сам шаблон.
Ну уж на крааайний случай:
$(window).on('load', function(){
//Сюда вставить код инициализации маски
});
Хотя и предыдущего кода будет достаточно.
А вообще правильно, чтобы вверху у Вас оставался только jquery в секции head. А всё остальное можно вниз прятать. Тогда всегда всё будет работать.
1. Все эти скрипты обращаются к полю по id или class у этого поля в форме обратной связи и в форме оформления заказа нет ни класса ни id, есть имя, но по имени что то обратиться не получается.
Всё просто
$('[name="ИМЯ ПОЛЯ"]')
2. Непонятно как это реализовать во всплывающей форме
Все обновления контента, а также действия всплывающих окон вызывают событие new-content.
Соответственно вешаемся на событие к body:
$("body").on("new-content", function(){
//Мой код инициализации
});
Ну уж если совсем не получается... То можно просто прописать код инициализации в сам шаблон обратной связи.
Нет. Надо добавить характеристики для фильтрации именно на вкладку характеристики у самого товара. Т.к. комплектации и товары это разные сущности.
Модуль появился в Магазине дополнений. Можете качать.
Дело в том, что это закладка на будущее. Когда у Нас будет в будущем скидка общая на всю корзину товара. Поэтому она пока не актуальна.
По умолчанию, это жестко прописано. Т.к. это стандартная настройка. Если Вам нужно выводить без оборачивания, то Вам нужен другой блок "Пользовательский Шаблон". Где подключать нужный или созданный Вами шаблон.
Там доступна переменная $cart, которая содержит объект корзины. Соответственно так:
{$cart_data=$cart->getCartData(false, false)}
Форум ReadyScript Сообщения от Закусило Александр