26 Отредактировано Илья (30.06.2016 15:30:01)

Re: Создать отдельную страницу

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

Что означает у Вас данный код:

function beforeWrite($flag) //функция перед записью в бд
    {
        //Записать id в базу
        $order = new \Newpage\Model\Orm\Mydiscount(); //созданная мной таблица
        $order['order_id'] = $order_num; 
        $res = $order->insert();
    } 

Получается эта функция нам не нужна?

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

И почему вы вешаетесь на запись именно Вашего ORM MyDiscount?

Но ведь данные нужно заноить в мою таблицу?

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

Вы ведь должны вешаться на запись самого заказа. Разве не так?

Я думал тут указывать куда записывать id заказа. А где жетогда заносить данные в мою таблицу?

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

И ещё вопрос, откуда вы предполагаете брать $order_num?

Вот на счет $order_num я не понимаю как быть

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

Re: Создать отдельную страницу

У вас записывается заказ. Так подвестесь на хук записи заказа и там заносите в БД Ваш ORM объект. Там же и будет доступен сам объект заказа.
Ато получается Вы кодом сказали, что записывать надо самого себя. BeforeWrite в ORM объекте срабатывает перед записью самого себя. А чтобы сделать действия с другим объектом перед или после записи, то нужно использовать хук. В Вашем случае надо записывать Ваш ORM после записи заказа.

Смотрите хук afterwrite http://readyscript.ru/dev-manual/dev_hooks.html


Что касается переменных, то они не берутся из неоткуда. Их надо как-то присваивать. Глобальных переменных в RS практически нет. Это я к тому, что $order_num нужно сначала объявить чему-то равной, чтобы потом с ней оперировать.

28 Отредактировано Илья (30.06.2016 16:25:44)

Re: Создать отдельную страницу

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

У вас записывается заказ. Так подвестесь на хук записи заказа и там заносите в БД Ваш ORM объект. Там же и будет доступен сам объект заказа.
Ато получается Вы кодом сказали, что записывать надо самого себя. BeforeWrite в ORM объекте срабатывает перед записью самого себя. А чтобы сделать действия с другим объектом перед или после записи, то нужно использовать хук. В Вашем случае надо записывать Ваш ORM после записи заказа.

Смотрите хук afterwrite http://readyscript.ru/dev-manual/dev_hooks.html
.

Так значит в файле handlers.inc.php подвешиваюсь на хук(подскажите название хука?)

создаю публичную статическую функцию  afterwrite
делаю запись в МОЮ бд

так получается?я Вас првильно понял?

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

Что касается переменных, то они не берутся из неоткуда. Их надо как-то присваивать. Глобальных переменных в RS практически нет. Это я к тому, что $order_num нужно сначала объявить чему-то равной, чтобы потом с ней оперировать.

Это я прекрсно понимаю.

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

Re: Создать отдельную страницу

Да. Правильно.
Я Вам дал ссылку с хуками http://readyscript.ru/dev-manual/dev_hooks.html

30 Отредактировано Илья (30.06.2016 16:56:45)

Re: Создать отдельную страницу

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

Это я к тому, что $order_num нужно сначала объявить чему-то равной, чтобы потом с ней оперировать.

куда смотреть тут?где взять то, чему обьявить $order_num

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

Re: Создать отдельную страницу

Напишите код для afterwrite заказа, я Вам подскажу где.

32

Re: Создать отдельную страницу

$this
                ->bind('orm.afterwrite.shop-order');
    public static function OrmAfterwriteShopOrder($data) 
    {

    $order = $data['orm']; 

    $order = new \Newpage\Model\Orm\Mydiscount();
    $order['order_id'] = "1";
    $res = $order->insert();

    }

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

Re: Создать отдельную страницу

Итак поясняю:

 public static function OrmAfterwriteShopOrder($data) 
    {

    //Получаем объект заказа из массива данных 
    $order = $data['orm']; //ЗДЕСЬ ОБЪЕКТ ЗАКАЗА \Shop\Model\Orm\Order

    //Здесь я зачем-то переназначаю переменную $order в, которой находится объект заказа уже.
    $order = new \Newpage\Model\Orm\Mydiscount(); //ЗДЕСЬ объект промежуточной Вашей таблицы
    //Записываю значение в поле order_id для таблицы
    $order['order_id'] = "1";
    //Запись значения в БД.
    $res = $order->insert();

    }

order_num можно взять из объекта заказа. Переменную для записи в БД нужно иметь свою отдельную.
Получить корзину заказа, можно через
$order->getCart()

Получить купоны можно так:
$order->getCart()->getCouponItems()

Чтобы посмотреть какого типа переменная и что в ней содержится в любом php файле можно так:

<pre>
var_dump(Имя переменной);
</pre>
exit(); //Останавливает всё

P.S.
Так, как у Вас явные пробелы в ООП, я специально не даю прямых ответов на вопросы связанные с объектно-ориентированным программированием. Я даю наводящие вопросы, чтобы Вы самостоятельно немножко разобрались. Поэтому Вы не обижайтесь, а пробуйте, я постараюсь дать максимальную возможною справочную информацию.

34 Отредактировано Закусило Александр (30.06.2016 18:06:49)

Re: Создать отдельную страницу

Кстати, Вы используте в работе какую-либо IDE?

35 Отредактировано Илья (30.06.2016 18:54:07)

Re: Создать отдельную страницу

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

Кстати, Вы используте в работе какую-либо IDE?

Нет, только SublimeText3.

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

P.S.
Так, как у Вас явные пробелы в ООП, я специально не даю прямых ответов ...

Да нет,что Вы и в смыслях не было, наоборот я премного благодарен.

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

order_num можно взять из объекта заказа. Переменную для записи в БД нужно иметь свою отдельную.
Получить корзину заказа, можно через
$order->getCart()
Получить купоны можно так:
$order->getCart()->getCouponItems()

Это тоже мне все ясно.
но мне же сейчас нужно, вместо 1 вноссить order_num туда...

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

Re: Создать отдельную страницу

Правильно и купон. Возьмите его из объекта заказа как и order_num.

<pre>
var_dump($order);
</pre>
exit();

37 Отредактировано Илья (01.07.2016 09:50:27)

Re: Создать отдельную страницу

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

Правильно и купон. Возьмите его из объекта заказа как и order_num.

вот сделал немного по другому, id заказа записывается в мою промежуточную таблицу

    public static function OrmAfterwriteShopOrder($data) 
    {

    $order = $data['orm']; 
    
    $order_id = new \Newpage\Model\Orm\Mydiscount();
    $order_id['order_id'] = $order['order_num'];
    $res = $order_id->insert();

    }

но ведь id купона хранится в order_discount?

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

Re: Создать отдельную страницу

Ну, а для чего я Вам написал выше:

Получить купоны можно так:
$coupons=$order->getCart()->getCouponItems()

39 Отредактировано Илья (01.07.2016 11:56:45)

Re: Создать отдельную страницу

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

Ну, а для чего я Вам написал выше:

Получить купоны можно так:
$coupons=$order->getCart()->getCouponItems()

Я делал $coupons['id']; выдает ошибку, такой переменной нет

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

Re: Создать отдельную страницу

Ну а Вы предварительно не смотрите, что в переменной?

<pre>
var_dump($coupons);
</pre>
exit();

41

Re: Создать отдельную страницу

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

Ну а Вы предварительно не смотрите, что в переменной?

<pre>
var_dump($coupons);
</pre>
exit();

Нет, не получается вывести что бы посмотреть

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

Re: Создать отдельную страницу

Чтобы посмотреть что у Вас выводится, нужно сохранить заказ. Вы можете сделать это в админ панели в разделе заказа какого-либо. Когда нажмёте сохранить, пойдёт запрос на сохранение. И Вы можете в ответе сервера посмотреть, что он вернёт. А вернуть он должен то, что у Вас в var_dump

43

Re: Создать отдельную страницу

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

Чтобы посмотреть что у Вас выводится, нужно сохранить заказ. Вы можете сделать это в админ панели в разделе заказа какого-либо. Когда нажмёте сохранить, пойдёт запрос на сохранение. И Вы можете в ответе сервера посмотреть, что он вернёт. А вернуть он должен то, что у Вас в var_dump

Либо ошибку при сохранении выдает либо сохраняет и ничего не показывается

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

Re: Создать отдельную страницу

Правильно. Так и должно быть. Должна выдавать ошибка передачи данных, т.к. ожидается в ответе json, а из-за var_dump вернётся от сервера просто строка форматированная. Посмотрите с помощью firebug, что пришло в ответе от сервера.

45 Отредактировано Илья (01.07.2016 12:58:22)

Re: Создать отдельную страницу

опередили меня ))

array(1) {
  ["3d73721ca9"]=>
  array(2) {
    ["coupon"]=>
    object(Shop\Model\Orm\Discount)#321 (7) {
      ["serialized_products_field":protected]=>
      string(9) "sproducts"
      ["products_field":protected]=>
      string(8) "products"
      ["_values":protected]=>
      array(16) {
        ["id"]=>
        string(1) "3"
        ["site_id"]=>
        string(1) "1"
        ["code"]=>
        string(4) "1212"
        ["descr"]=>
        string(0) ""
        ["active"]=>
        string(1) "1"
        ["sproducts"]=>
        string(6) "a:0:{}"
        ["period"]=>
        string(7) "forever"
        ["endtime"]=>
        string(19) "0000-00-00 00:00:00"
        ["min_order_price"]=>
        string(4) "0.00"
        ["discount"]=>
        string(5) "10.00"
        ["discount_type"]=>
        string(1) "%"
        ["round"]=>
        string(1) "1"
        ["uselimit"]=>
        string(1) "0"
        ["oneuserlimit"]=>
        string(1) "0"
        ["wasused"]=>
        string(1) "4"
        ["products"]=>
        NULL
      }
      ["_self_class":protected]=>
      string(23) "Shop\Model\Orm\Discount"
      ["_local_id":protected]=>
      int(158)
      ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
      ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
    }
    ["cartitem"]=>
    object(Shop\Model\Orm\OrderItem)#279 (5) {
      ["_values":protected]=>
      array(5) {
        ["uniq"]=>
        string(10) "3d73721ca9"
        ["type"]=>
        string(6) "coupon"
        ["entity_id"]=>
        string(1) "3"
        ["title"]=>
        string(33) "Купон на скидку 1212"
        ["data"]=>
        bool(false)
      }
      ["_self_class":protected]=>
      string(24) "Shop\Model\Orm\OrderItem"
      ["_local_id":protected]=>
      int(69)
      ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
      ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
      array(0) {
      }
    }
  }
}

То что мне нужно находится в переменных id и entity_id и в объектах Shop\Model\Orm\OrderItem и Shop\Model\Orm\Discount

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

Re: Создать отдельную страницу

Ну вот берите. В чём проблема? smile

47 Отредактировано Закусило Александр (01.07.2016 13:45:54)

Re: Создать отдельную страницу

Переберите цикл и возьмите. Вы же знаете как циклы перебирать? Если нет, то Вам нужно учить PHP, т.к. это базовые знания по программированию. Иначе дальше Вы ни на шаг не провинитесь.

Почитайте книгу
http://www.internet-technologies.ru/books/book_190.html

или посмотрите видеоуроки по программированию на php

48 Отредактировано Закусило Александр (01.07.2016 16:40:09)

Re: Создать отдельную страницу

Правильно это надо сделать так:

public static function OrmAfterwriteShopOrder($data) 
{

    $order = $data['orm']; 
    $coupons = $order->getCart()->getCouponItems(); //Получение купонов заказа
    if (!empty($coupons)) {
         foreach ($coupons as $uniq=>$coupon){
               $cartitem = $coupon['cartitem']; //Получаем связь купона
         }

         //Предварительно удалим старые связи
         \RS\Orm\Request::make()
                     ->delete()
                     ->from(new \Newpage\Model\Orm\Mydiscount())
                     ->where(array{
                              'order_id' => $order['id']
                     })->exec();

         $order_id = new \Newpage\Model\Orm\Mydiscount();
         $order_id['order_id'] = $order['order_num'];
         $order_id['discount_id'] = $cartitem['entity_id'];
         $res = $order_id->insert();

    }   


    

}

49

Re: Создать отдельную страницу

Спасибо!

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

50 Отредактировано Илья (11.07.2016 15:03:22)

Re: Создать отдельную страницу

Подскажите пожалуйста, где допущена ошибка, потому что выводит данные только из таблицы mydiscount.
P.S. я проверил все на отдельном файле в корне и через var_dump(), все работает правильно, но при переносе в модуль у меня выводит данные только из таблицы mydiscount. Мне кажется все дело в api файле. Подскажите верное решение.

содержание файла myctrl.inc.php

namespace Newpage\Controller\Admin;
use \RS\Html\Table\Type as TableType,
    \RS\Html\Toolbar\Button as ToolbarButton,
    \RS\Html\Toolbar,
    \RS\Html\Tree,
    \RS\Html\Table,
    \RS\Html\Filter;


class MyCtrl extends \RS\Controller\Admin\Crud
{
        function __construct()
    {
         parent::__construct(new \Newpage\Model\MyApi());
    }
    
    function helperIndex()
    {
           
        
        $helper = parent::helperIndex();
        $q = $this->api->queryObj();
        $q = \RS\Db\Adapter::sqlExec('
        SELECT iazw_order_items.order_id, iazw_order_items.title, iazw_order_mydiscount.discount_id, iazw_order_discount.descr 
        FROM iazw_order_items 
        INNER JOIN iazw_order_mydiscount ON iazw_order_mydiscount.order_id = iazw_order_items.order_id INNER JOIN iazw_order_discount ON iazw_order_mydiscount.discount_id = iazw_order_discount.id');

            
        $helper = parent::helperIndex();
        $helper->setTopTitle(t('Товары со скидками'));
        $edit_pattern = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $helper->setTable(new Table\Element(array(
            'Columns' => array(         
                new TableType\String('order_id', '1'),
                new TableType\String('title', t('2')), 
                new TableType\String('discount_id', t('3')),
                new TableType\String('descr', t('14')),             
        ))));

        return $helper;
    }
    
}


myapi.inc.php

<?php
/**
* ReadyScript ([url]http://readyscript.ru[/url])
*
* @copyright Copyright (c) ReadyScript lab. ([url]http://readyscript.ru[/url])
* @license [url]http://readyscript.ru/licenseAgreement/[/url]
*/
namespace Newpage\Model;

class MyApi extends \RS\Module\AbstractModel\EntityList
{
    
    function __construct()
    {
        parent::__construct(new \Shop\Model\Orm\OrderItem, //С какой таблицей через ORM объект работать
        array(
            'multisite' => false, //Объект является не мультисайтовым (без поля site_id)
            //'defaultOrder' => 'id DESC' //Сортировка по умолчанию при выборке
        ));

        parent::__construct(new \Shop\Model\Orm\Discount,
        array(
            'multisite' => true
        ));
        parent::__construct(new \Newpage\Model\Orm\Mydiscount,
        array(
           'multisite' => false
        ));

    }

}

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