1 Отредактировано Илья (03.03.2017 16:45:17)

Тема: В модуле Каталог заменить колонку[Решено]

В модуле каталог, перегрузить колонку Название

modules/catalogcustom/config/file.inc.php

<?php
namespace Catalogcustom\Config;
use \RS\Orm\Type;


class File extends \RS\Orm\ConfigObject
{
   
    
}

modules/catalogcustom/config/module.xml

<?xml version="1.0" encoding="utf-8"?>
<config>
    <defaultValues>    
        <name multilanguage="true">Перегрузка модуля каталог</name>
        <description multilanguage="true">Вносим изменения в модуль каталог</description>        
        <version>1.0.0.0</version>
        <author>My mod</author>      
    </defaultValues>
</config>

modules/catalogcustom/config/handlers.inc.php

<?php
namespace Catalogcustom\Config;

class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this->bind('controller.exec.catalog-admin-ctrl.index');
    }

    /**
    * Обработчик события 
    * 
    * @param \RS\Controller\Admin\Helper\CrudCollection $helper - Хелпер визульной части админ. панели
    * @return void
    */
    public static function controllerExecCatalogAdminCtrlIndex(\RS\Controller\Admin\Helper\CrudCollection $helper)
    {
        /**
        * @var \RS\Html\Table\Control - объект: Менеджер таблицы
        */
        $table_control = $helper['table'];

        $table = $table_control->getTable(); //Здесь RS\Html\Table\Element    

        $table->removeColumn(1); //1 - это номер колонки, укажите здесь свою. Нумерация начинается с 0.

        //Далее добавляете колонку
        $new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalogcustom%/title.tpl');

        $table->addColumn($new_column, 1); //Добавляете колонку $new_column в позицию 1
    }
    
}

Изменить название колонки
modules/catalogcustom/config/handlers.inc.php

<?php
namespace Catalogcustom\Config;

class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this->bind('controller.exec.catalog-admin-ctrl.index');
    }

    /**
    * Обработчик события 
    * 
    * @param \RS\Controller\Admin\Helper\CrudCollection $helper - Хелпер визульной части админ. панели
    * @return void
    */
    public static function controllerExecCatalogAdminCtrlIndex(\RS\Controller\Admin\Helper\CrudCollection $helper)
    {
        /**
        * @var \RS\Html\Table\Control - объект: Менеджер таблицы
        */
         $table_control = $helper['table'];
         $columns = $table_control->getTable()->getColumns(); //Получаем колонки таблицы
         $column_user_tpl = $columns[1];  // Тут объект  RS\Html\Table\Type\Usertpl

          // Соответственно в переменной $column_user_tpl, вам доступны только те методы, что есть в классе                         RS\Html\Table\Type\Usertpl
         // Все возможные методы данного класса можно посмотреть в файле /core/rs/html/table/type/usertpl.inc.php
         // Видим, что класс  Usertpl является потомком AbstractType, соответственно методы также нужно смотреть в
         // RS\Html\Table\Type\AbstractType

         //Читаем описания к методам, находим, что чтобы установить заголовок нужно вызвать setTitle
         $column_user_tpl->setTitle('Новый заголовок колонки');
    }
    
}

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

2

Re: В модуле Каталог заменить колонку[Решено]

Чтобы сказать как поправить ошибку, нужно понять, что вы хотите сделать.

Вы привели просто кусок нерабочего кода.
Вы вызываете некий метод addItem() у колонки типа RS\Html\Table\Type\Usertpl (который в $columns[1]), а такого метода там соответственно нет, о чем вам и говорит PHP.

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

3

Re: В модуле Каталог заменить колонку[Решено]

Я хотел сделать следующее,  в каталоге товаров, где выводится название товара, я хотел изменить это своим вариантом

(new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl'));

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

4

Re: В модуле Каталог заменить колонку[Решено]

$table_control = $helper['table'];
$columns = $table_control->getTable()->getColumns(); //Получаем колонки таблицы
$column_user_tpl = $columns[1];  // Тут объект  RS\Html\Table\Type\Usertpl

// Соответственно в переменной $column_user_tpl, вам доступны только те методы, что есть в классе  RS\Html\Table\Type\Usertpl
// Все возможные методы данного класса можно посмотреть в файле /core/rs/html/table/type/usertpl.inc.php
// Видим, что класс  Usertpl является потомком AbstractType, соответственно методы также нужно смотреть в
// RS\Html\Table\Type\AbstractType

//Читаем описания к методам, находим, что чтобы установить заголовок нужно вызвать setTitle
$column_user_tpl->setTitle('Новый заголовок колонки');

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

5 Отредактировано Илья (02.03.2017 10:07:05)

Re: В модуле Каталог заменить колонку[Решено]

Но мне нужно не название поменять, а добавить tpl шаблон '%catalog%/title.tpl' - вот это мне нужно добавить

Было

new TableType\Text('title', t('Название'), array(

Что бы Стало

(new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl'));

И Вы написали что $column_user_tpl = $columns[1];  // Тут объект  RS\Html\Table\Type\Usertpl

Но я делаю var_dump($columns); вот что получаю и объекта  RS\Html\Table\Type\Usertpl там нет, там есть только Text и Checkbox, что не так?

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

6

Re: В модуле Каталог заменить колонку[Решено]

Я предположил по тексту вашей ошибки, что в $columns[1] у вас RS\Html\Table\Type\Usertpl:

Из вашего поста:
Вы вызываете $columns[1]->addItem(...), получаете ошибку:

Fatal error: Call to undefined method RS\Html\Table\Type\Usertpl::addItem()

Ок, значит вам нужно заменить колонку на свою:
Постараюсь вам описать детально, чтобы вы поняли принцип, как работать с кодом:
Сразу говорю, код будет примерный, возможно сразу рабочий, но проверять времени нет.

$table_control = $helper['table']; //Вардампите, понимаете, что здесь объект RS\Html\Table\Control
//Это управляющая обертка над визуальным элементом. У неё можно попросить сам визуальный элемент.

$table = $table_control->getTable(); //Здесь RS\Html\Table\Element
//Смотрите какие методы есть в этом классе. Они все подписаны.
//Если вы желаете заменить колонку, то нужно удалить старую и добавить новую.

$table->removeColumn(1); //1 - это номер колонки, укажите здесь свою. Нумерация начинается с 0.

//Далее добавляете колонку
$new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl');

$table->addColumn($new_column, 1); //Добавляете колонку $new_column в позицию 1

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

7

Re: В модуле Каталог заменить колонку[Решено]

Но removeColumn этого метода нету в element.inc.php

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

8

Re: В модуле Каталог заменить колонку[Решено]

Прошу прощения, в моей локальной версии такой метод уже есть - это сбило меня с толку. (он выйдет в будущих версиях).
А вот в 2.0.x его пока оказывается действительно нет.

Добавьте его в файл /core/rs/html/table/element.inc.php или подождите обновления, выпустим в следующем.

    /**
     * Удаляет колонку из списка
     * @param integer $n номер колонки
     * @return Element
     */
    function removeColumn($n)
    {
        array_splice($this->columns, $n, 1);
        return $this;
    }

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

9

Re: В модуле Каталог заменить колонку[Решено]

Вот спасибо большое

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

10

Re: В модуле Каталог заменить колонку[Решено]

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

//Далее добавляете колонку
$new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl');

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

Re: В модуле Каталог заменить колонку[Решено]

Попробуйте

$new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl', array('href' => \RS\Router\Manager::obj()->getAdminPattern('edit', array(':id' => '@id'));

12 Отредактировано Илья (31.05.2017 14:17:05)

Re: В модуле Каталог заменить колонку[Решено]

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

Попробуйте

$new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl', array('href' => \RS\Router\Manager::obj()->getAdminPattern('edit', array(':id' => '@id'));

Немного поправил, там была ошибка, вот правильный код

        $new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl', array(
                'LinkAttr' => array(
                     'class' => 'crud-edit'
                ),
                'href' => \RS\Router\Manager::obj()->getAdminPattern('edit', array(':id' => '@id')), 'Sortable' => SORTABLE_BOTH, 'CurrentSort' => SORTABLE_ASC));

Только появился один вопрос, в стандарте там еще есть часть кода 'dir' => $dir, для чего она? и чем черевато ее отсутствие?

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

Re: В модуле Каталог заменить колонку[Решено]

$dir туда передавался текущий идентификатор каталога. Для уже созданных товаров он не обязателен. Но можно и добавить из $_GET