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

Ну естественно, Вы в файле API несколько раз переназначили с чем оно работает при вызове  parent::__construct(.
Правильный API должен содержать только один экземпляр объекта того с чем он работает.

<?php
namespace Newpage\Model;
/**
* Класс API
*/
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' //Сортировка по умолчанию при выборке
        ));
    }

}

Этим самым мы объявили, что мы будем работать через API только с объектом \Shop\Model\Orm\OrderItem. А именно с таблицей order_items.

Теперь, что касается контроллера... Там в самом начале Вы уже объявили API с которым работает контроллер через присвоение АПИ контроллеру в конструкторе класса.

function __construct()
    {
         parent::__construct(new \Newpage\Model\MyApi()); //API с которым будет работать контроллер
    }

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

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->join(new \Newpage\Model\Orm\Mydiscount(), 'A.order_id=B.order_id', 'B') //JOIN к таблице с нужными сведениями
             ->join(new \Shop\Model\Orm\Discount(), 'B.discount_id=C.id', 'C'); //JOIN к таблице с скидками

        //Теперь, что выбирать
        $q->select = "A.order_id, A.title, B.discount_id, C.descr ";
            
        $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;
    }
    
}

52 Отредактировано Илья (12.07.2016 12:44:24)

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

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

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

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

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

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

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

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

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

Да спасибо!

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

53

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

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

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

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

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

Надо ещё в 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') )),

55

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

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

Надо ещё в 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') )),

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

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

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

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

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

57

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

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

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

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

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

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

58 Отредактировано Закусило Александр (13.07.2016 14:32:24)

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

Не может этого быть, т.к. это просто класс для ссылки. У вас ссылка какая получается?

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

Видите у Вас id пустой. В select вы добавили, чтобы entity_id доставался?

60 Отредактировано Закусило Александр (14.07.2016 19:52:43)

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

К публичной части можно через getUrlPattern('catalog-front-product', array(':id' => '@entity_id'));
Аналог getAdminPattern соответственно.