Тема: Редактирование полей
Подскажите как сделать возможность редактировать поле телефон у зарегистрированного пользователя в "Редактирование товара"
По примеру других полей не получается.
Форум ReadyScript Вопросы по работе с системой Редактирование полей
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите как сделать возможность редактировать поле телефон у зарегистрированного пользователя в "Редактирование товара"
По примеру других полей не получается.
Подскажите как сделать возможность редактировать поле телефон у зарегистрированного пользователя в "Редактирование товара"
По примеру других полей не получается.
Не совсем понятно. Вы товару хотите поле добавить или редактировать. Или Вы хотите пользовательское поле редактировать. И укажите где в админ панели или публичной части?
а можно это сделать, как по примеру с полем "Контактное лицо" ?
Это интерфейс присущ, административной части, которая поддерживается RS. Вы можете перегрузить шаблон админ. панели. Но Вам придётся в таком случае отвечать на обработку редактирования этого поля. Т.к. в стандарте в админ. панели редактирование идёт через нажатие на этого пользователя. Т.е. Вам придётся перегрузить контроллер. Но я не думаю, что это стоит того.
А есть возможность добавить редактирование доп полей, которые создаются в настройках модуля магазин?
Вы в настройках модуля магазин добавляли поля(Веб-сайт->Настройка модулей->Магазин)?
Вы в настройках модуля магазин добавляли поля(Веб-сайт->Настройка модулей->Магазин)?
Да ,там.
А Вы хотите откуда их редактировать? Из заказа?
Да, от туда. orderview.tpl шаблон
Ну нужно реализовать логику обработки данных полей, если вы например их будете выводить. Сам конфиг можно получить так:
{assign var=shop_config value=ConfigLoader::byModule('shop')}
И далее просто выводить значения полей в инпуты.
Сам шаблон Вы естественно можете перегрузить в своей теме оформления.
Что касается обработки полей, то я думаю Вам нужен хук:
controller.afterexec.КОРОТКОЕ_ИМЯ_КОНТРОЛЛЕРА из таблицы http://readyscript.ru/dev-manual/dev_ho … hooks_list
Где можно из POST вытащить Ваши поля и сохранить у конфига.
Ну например:
$config = \RS\Config\Loader::byModule('shop');
$config['нужное мне поле'] = \RS\Http\Request::commonInstance()->request('ПОЛЕ', TYPE_STRING);
$config->update();
Т.е. объект конфига, тоже ORM объект, то у него доступны методы update и insert как и у всех
Сам конфиг можно получить так:
{assign var=shop_config value=ConfigLoader::byModule('shop')}
В orderview.tpl после
{assign var=products value=$cart->getProductItems()}
вставил
{assign var=shop_config value=ConfigLoader::byModule('shop')}
И далее просто выводить значения полей в инпуты.
заменил в orderview.tpl
{foreach from=$fm->getStructure() item=item}
<tr class="{cycle values=$hl name="order"}">
<td class="otitle">
{$item.title}
</td>
<td>{$item.current_val}</td>
</tr>
{/foreach}
на это
{foreach from=$fm->getStructure() item=item}
<tr class="{cycle values=$hl name="order"}">
<td class="otitle">{$item.title}</td><td><input type="text" name="current_val" value="{$item.current_val}" class="maxWidth"></td>
<!--<td>{$item.current_val}</td>-->
</tr>
{/foreach}
Сам шаблон Вы естественно можете перегрузить в своей теме оформления.
шаблон перегрузил
Что касается обработки полей, то я думаю Вам нужен хук:
controller.afterexec.КОРОТКОЕ_ИМЯ_КОНТРОЛЛЕРА из таблицы http://readyscript.ru/dev-manual/dev_ho … hooks_list
<?php
namespace Edpole\Config;
use \RS\Orm\Type as OrmType;
class Handlers extends \RS\Event\HandlerAbstract
{
function init()
{
$this
->bind('controller.afterexec.shop-order');
}
Не совсем уверен на счет того, что это правильно(функция)
Где можно из POST вытащить Ваши поля и сохранить у конфига.
public static function ControllerAfterexecShopOrder ($data) {
$config = $data['orm'];
$config = \RS\Config\Loader::byModule('shop');
$config['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING);
$config->update();
}
Вот это нужно добавлять или нет?
if (isset($_POST['current_val'])){
$order['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING);
}
Спасибо за помощь.
if (isset($_POST['current_val'])){
$order['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING);
}
Всё гораздо проще, функция принимает третий параметр. Это значение по умолчанию. Поэтому не нужно проверять через $_POST. А просто:
$order['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING, false);
И далее уже проверять на не false
Или просто сделать значением пустую строку. Тогда ввоще ничего проверять не нужно.
if (isset($_POST['current_val'])){
$order['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING);
}
на счет этого все понятно. Но значение почему то не подхватывается. Тоесть я ввожу данные нажимаю сохранить, но ничего не происходит, где то в функции допущена ошибка?
public static function ControllerAfterexecShopOrder ($data) {
$config = $data['orm'];
$config = \RS\Config\Loader::byModule('shop');
$config['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING);
$config->update();
}
Ну Вы die или var_dump сделайте, чтобы понять срабатывает ли функция.
Я думаю дело в хуке
controller.afterexec.shop-admin-order
Пропустили видимо admin
А можно вообще наверное ещё проще использовать orm.beforewrite.shop-config-file, тогда это сразу в объекте сработает.
А можно вообще наверное ещё проще использовать orm.beforewrite.shop-config-file, тогда это сразу в объекте сработает.
попробовал оба варианта хуков, не помогает. А var_dump от чего тут использовать?
чтобы посмотреть срабатывает эта функция у Вас или нет.
Киньте код обоих попыток.
Кстати, первый хук немного не такой. Он же должен вести на контроллер в админ панели. Вы в каком контроллере данные сохраняете.
Просто если посмотрите в папку с контролерами админки, то там есть только orderctrl, а не order. Вы же понимаете как формируется хук?
controller.afterexec.ПАПКАМОДУЛЯ-ПАПКАКОНТРОЛЛЕРА(ADMIN)-ИМЯФАЙЛАКОНТРОЛЛЕРА.
А вот второй должен сработать. Надо сделать var_dump и посотреть прервётся ли сохранение.
чтобы посмотреть срабатывает эта функция у Вас или нет.
я понял для чего) Можете привести пример выполнения этого?
Киньте код обоих попыток.
Скину второй вариант
function init()
{
$this
->bind('orm.beforewrite.shop-config-file');
}
public static function OrmBeforewriteShopConfigFile ($data) {
$config = $data['orm'];
$config = \RS\Config\Loader::byModule('shop');
$config['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING);
$config->update();
}
Кстати, первый хук немного не такой. Он же должен вести на контроллер в админ панели. Вы в каком контроллере данные сохраняете.
Просто если посмотрите в папку с контролерами админки, то там есть только orderctrl, а не order. Вы же понимаете как формируется хук?
controller.afterexec.ПАПКАМОДУЛЯ-ПАПКАКОНТРОЛЛЕРА(ADMIN)-ИМЯФАЙЛАКОНТРОЛЛЕРА.
Значит первый вариант у меня был не правильный, я делал без admin. Да понимаю как формируется
А вот второй должен сработать. Надо сделать var_dump и посотреть прервётся ли сохранение.
как правильно вывести var_dump(а тут что?);
как правильно вывести var_dump(а тут что?);
Всё, что угодно. Например var_dump($data['orm']);. Ваша задача просто понять, сработала у Вас функция перед записью объекта или нет. Для этого мы это пишем и если var_dump сработает, то когда будет сохранять конфиг у нас либо выведется это значение, либо запись прервётся и консоли браузера Вы сможете увидеть, что в запросе появился вывод var_dump. Это нужно в первую очередь для отладки.
Я попробовал хук orm.beforewrite.shop-config-file . Я меня всё сработало.
Этот хук вызывается перед записью ORM объекта в БД.
Зачем вы вызываете $config->update();? Вам нужно лишь установить Ваше значение.
$config->update(); - Вы опять вызовите запись в БД, т.к. этим вы говорите опять сохрани мне конфиг в БД. Т.е. зациклите сохранение до бесконечности.
Вот мой код:
function init()
{
$this
->bind('orm.beforewrite.shop-config-file');
}
/**
* Действия перед записью в БД
*
* @param array $data - массив с данными
*/
public static function ormBeforewriteShopConfigFile($data)
{
$config = $data['orm'];
$config = \RS\Config\Loader::byModule('shop');
$config['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING, "");
}
Попробуйте вот для примера добавить var_dump и сохранить в Веб-сайт->Настройка модулей->Магазин сам конфиг.
orm.beforewrite у Вас сработает в тех случаях если вызывался
insert() - запись объекта
или
update() - обновление объекта
Вы сами действия где производите? В каком разделе? я имею ввиду с полем Вашим.
Если я правильно понимаю, Вы добавили поле в заказе. Соответственно у Вас сохраняется объект заказа. Где находится ORM объект заказа в модуле shop? в /modules/shop/orm/order.inc.php
Соответственно, мы делаем хук на сохранение заказа, т.е. перед его сохранением, чтобы из поста записать значение. Т.е. делать нужно вот так:
function init()
{
$this
->bind('orm.beforewrite.shop-order');
}
/**
* Действия перед записью в БД
*
* @param array $data - массив с данными
*/
public static function ormBeforewriteShopOrder($data)
{
$config = \RS\Config\Loader::byModule('shop'); //Получам конфиг магазина
$config['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING, ""); //Записываем значение из поста
$config->update(); //ЗДЕСЬ есть, т.к. сохраняется другой объект
}
В $data['orm'] - здесь будет ORM объект заказа.
Пробуйте
P.S. Запишу видео скоро по beforewrite и afterwrite, чтобы вопросов не оставалось.
Александр
Да вот куда не вставлю var_dump ошибку выдает.
Вставил Ваш код, все равно не работает. Может какая то оошибка в шаблоне самом?
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум ReadyScript Вопросы по работе с системой Редактирование полей