Тема: Редактирование полей

Подскажите как сделать возможность редактировать поле телефон у зарегистрированного пользователя в "Редактирование товара"
По примеру других полей не получается.

Повысить оценку Понизить оценку

Re: Редактирование полей

Подскажите как сделать возможность редактировать поле телефон у зарегистрированного пользователя в "Редактирование товара"
По примеру других полей не получается.

Не совсем понятно. Вы товару хотите поле добавить или редактировать. Или Вы хотите пользовательское поле редактировать. И укажите где в админ панели или публичной части?

3

Re: Редактирование полей

http://storage3.static.itmages.ru/i/16/0606/s_1465215372_4569729_7cf89e6525.png

Повысить оценку Понизить оценку

Re: Редактирование полей

Нажмите в ФИО пользователя.

5

Re: Редактирование полей

а можно это сделать, как по примеру с полем "Контактное лицо" ?

Повысить оценку Понизить оценку

Re: Редактирование полей

Это интерфейс присущ, административной части, которая поддерживается RS. Вы можете перегрузить шаблон админ. панели. Но Вам придётся в таком случае отвечать на обработку редактирования этого поля. Т.к. в стандарте в админ. панели редактирование идёт через нажатие на этого пользователя. Т.е. Вам придётся перегрузить контроллер. Но я не думаю, что это стоит того.

7

Re: Редактирование полей

А есть возможность добавить редактирование доп полей, которые создаются в настройках модуля магазин?

Повысить оценку Понизить оценку

Re: Редактирование полей

Вы в настройках модуля магазин добавляли поля(Веб-сайт->Настройка модулей->Магазин)?

9

Re: Редактирование полей

Закусило Александр пишет:

Вы в настройках модуля магазин добавляли поля(Веб-сайт->Настройка модулей->Магазин)?

Да ,там.

Повысить оценку Понизить оценку

Re: Редактирование полей

А Вы хотите откуда их редактировать? Из заказа?

11

Re: Редактирование полей

Закусило Александр пишет:

А Вы хотите откуда их редактировать? Из заказа?

Да, от туда. orderview.tpl шаблон

Повысить оценку Понизить оценку

Re: Редактирование полей

Ну нужно реализовать логику обработки данных полей, если вы например их будете выводить. Сам конфиг можно получить так:

{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 как и у всех

13

Re: Редактирование полей

Закусило Александр пишет:

Сам конфиг можно получить так:

{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); 
    }  

Спасибо за помощь.

Повысить оценку +1 Понизить оценку

14 Отредактировано Закусило Александр (23.06.2016 15:54:03)

Re: Редактирование полей

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
Или просто сделать значением пустую строку. Тогда ввоще ничего проверять не нужно.

15 Отредактировано Андрей (23.06.2016 16:41:37)

Re: Редактирование полей

Закусило Александр пишет:

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();

    }

Повысить оценку Понизить оценку

Re: Редактирование полей

Ну Вы die или var_dump сделайте, чтобы понять срабатывает ли функция.
Я думаю дело в хуке
controller.afterexec.shop-admin-order
Пропустили видимо admin

Re: Редактирование полей

А можно вообще наверное ещё проще использовать orm.beforewrite.shop-config-file, тогда это сразу в объекте сработает.

18

Re: Редактирование полей

Закусило Александр пишет:

А можно вообще наверное ещё проще использовать orm.beforewrite.shop-config-file, тогда это сразу в объекте сработает.

попробовал оба варианта хуков, не помогает. А var_dump от чего тут использовать?

Повысить оценку Понизить оценку

Re: Редактирование полей

чтобы посмотреть срабатывает эта функция у Вас или нет.
Киньте код обоих попыток.
Кстати, первый хук немного не такой. Он же должен вести на контроллер в админ панели. Вы в каком контроллере данные сохраняете.
Просто если посмотрите в папку с контролерами админки, то там есть только orderctrl, а не order. Вы же понимаете как формируется хук?
controller.afterexec.ПАПКАМОДУЛЯ-ПАПКАКОНТРОЛЛЕРА(ADMIN)-ИМЯФАЙЛАКОНТРОЛЛЕРА.

А вот второй должен сработать. Надо сделать var_dump и посотреть прервётся ли сохранение.

20 Отредактировано Андрей (24.06.2016 12:52:15)

Re: Редактирование полей

Закусило Александр пишет:

чтобы посмотреть срабатывает эта функция у Вас или нет.

я понял для чего) Можете привести пример выполнения этого?

Закусило Александр пишет:

Киньте код обоих попыток.

Скину второй вариант

    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(а тут что?);

Повысить оценку Понизить оценку

21 Отредактировано Закусило Александр (24.06.2016 13:49:46)

Re: Редактирование полей

как правильно вывести 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, ""); 
    }

Re: Редактирование полей

Попробуйте вот для примера добавить var_dump и сохранить в Веб-сайт->Настройка модулей->Магазин сам конфиг.

23 Отредактировано Закусило Александр (24.06.2016 14:00:47)

Re: Редактирование полей

orm.beforewrite у Вас сработает в тех случаях если вызывался
insert() - запись объекта
или
update() - обновление объекта
Вы сами действия где производите? В каком разделе? я имею ввиду с полем Вашим.

24 Отредактировано Закусило Александр (24.06.2016 14:08:00)

Re: Редактирование полей

Если я правильно понимаю, Вы добавили поле в заказе. Соответственно у Вас сохраняется объект заказа. Где находится 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, чтобы вопросов не оставалось.

25 Отредактировано Андрей (24.06.2016 14:09:37)

Re: Редактирование полей

Александр
Да вот куда не вставлю var_dump ошибку выдает.
Вставил Ваш код, все равно не работает. Может какая то оошибка в шаблоне самом?

Повысить оценку Понизить оценку