Дмитрий пишет:

Здравствуйте!

При выборе способа доставки "изменяемая вручную цена", на сайте, напротив данного способа доставки выводиться надпись "Будет рассчитана менеджером". Как можно ее изменить?

\www\modules\shop\model\deliverytype\manual.inc.php (1 hit)
    Line 59:         return ($cost) ? CCustomView::cost($cost) : t('Будет рассчитана менеджером');

как вариант. Вместо 4, нужное кол-во символов

substr("пример", 0, 4);
Закусило Александр пишет:

Тогда уберите:

, 'LinkAttr' => array('class' => 'crud-edit')

Таким образом переходит, на "Добавить товар"

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

Надо ещё в select получать A.entity_id.
Тогда:

new TableType\Text('title', t('Товар'), array('href' => $this->router->getAdminPattern('edit', array(':id' => '@entity_id'), 'catalog-ctrl' ), 'LinkAttr' => array('class' => 'crud-edit') )),

Так выводится окно с редактированием, а что бы был переход в карточку товара?

Поддерживаю. Тоже задавался этим вопросом. Только мне нужно было что бы так работало и в мобильной версии и в основной. Так вот в основной версии работает корректно, а в мобильной перекидывает в корзину.

А как правильно указать ссылку на товар?

new TableType\Text('title', t('Товар'), array('href' => $this->router->getAdminPattern('edit', array(':id' => '@id') ), 'LinkAttr' => array('class' => 'crud-edit') )),
Закусило Александр пишет:

Но я думаю при переносе у Вас ничего не получилось, т.к. Вы написали запрос в ручную и скорее всего у Вас на удалёнке свой префикс к таблицам БД совсем другой.

Блин точно, про префикс то я совсем и забыл.

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

Я иногда проверяю сам запрос просто выполнив его, например на удалённом PHPMyAdmin, если он доступен. Чтобы не запоминать префиксы, правильно будет строить запросы ORM запросом, тогда всё будет учтено.

Думал допустить ошибку в создании запроса, потом оставил его в таком виде.

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

Я думаю, что правильный код контроллера должен быть такой:

Да спасибо!

В теме default, footer не прижимается к браузеру, что не красиво смотрится на определенных страницах.
Использую такое решение, может кому пригодится.

В тег body

display: flex;
flex-direction: column;

В .container_12 в файлах 720.css, 960.css, 1200.css

flex: 1 0 auto;

Подскажите пожалуйста, где допущена ошибка, потому что выводит данные только из таблицы 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
        ));

    }

}
Дмитрий пишет:
Илья пишет:

А если её просто скрыть в мобильной версии?

Что скрыть, зачем?

Не правильно вас понял наверное. Вы хотите что бы в мобильной версии было тоже всплывающее окно?тогда вам файл common.js строка 176

Спасибо!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Правильно и купон. Возьмите его из объекта заказа как и 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?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 я не понимаю как быть

Сделал заказ, он id заказа не записался. Значит чего то не хватает?
в функции beforewrite нужно дописать что то

А может дело в функции function _init(). Потому что я таблицу с ячеками создал вручную в phpmyadmin. А название таблицы и поля в функцию function _init() просто вписал, может быть дело в этом?

Функцию в mydiscount.inc.php закоментировал и попробовал проверить через var_dump. Создал файл в корне с содержимым

<?php
require_once 'setup.inc.php';

echo '<pre>';

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

var_dump($res);

echo '</pre>';

Запись в базу прошла.
А почему тогда не проходит при оформлении заказа?

В файле myapi.inc.php создал

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

Затем в папке model создал папку orm в ней файл mydiscount.inc.php с содержимым

<?php

namespace Newpage\Model\Orm;
use \RS\Orm\Type;


class Mydiscount extends \RS\Orm\OrmObject
{
    protected static
        $table = 'order_mydiscount';

    function _init()
    {
        parent::_init()->append(array(           
            'order_id' => new Type\Integer(array(
                'index' => true,
                'description' => t('id заказа'),
            )),
            'discount_id' => new Type\Integer(array(
                'description' => t('id скидки'),
            )),
        ));    
    } 

    function beforeWrite($flag)
    {
        $order = new \Newpage\Model\Orm\Mydiscount();
        $order['order_id'] = $order_num;
        $res = $order->insert();
    }  
}        

Так правильно получается? только наверно с переменными ошибся, не могли бы подсказать?

Можно же использовать функцию function beforeWrite($flag)
и подставить туда запрос на запись в новую бд?
И нужно создать еще один api?Тогда получается нужно создать еще папку orm и туда файл mydiscount.inc.php?

Или можно поступить таким образом?но опять таки нужно папку orm и туда файл mydiscount.inc.php
И в переменных я наверное ошибся?

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

Ну а в шаблоне orderview.tpl ведь купон каким то же образом выводится, нельзя по примеру сделать и тут?
http://storage2.static.itmages.ru/i/16/0629/s_1467205169_5552729_ac9743fd36.png