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