1,676

(15 ответов, оставленных в Вопросы по работе с системой)

{$preview=strip_tags($item->getPreview())}
{$preview|truncate:"50"}

Как добавить изображения для подкатегорий?

Всё есть здесь http://forum.readyscript.ru/topic/177/


как описание категорий убрать в нижний уровень перед подвалом?

Какая у Вас тема оформления?

P.S. Руководство по темам оформления:
http://readyscript.ru/text-blog/Kak-soz … adyScript/

1,678

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Илья пишет:

Можно же использовать функцию 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();

Вы молодец! Идёте в правильном направлении. Я просто говорил про то, что индекс Вам там такой не нужен. Т.к. можно просто использовать параметр у самого поля order_id при объявлении полей ORM объекта

  'index' => true,

1,679

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Илья пишет:

Все создал, а теперь мне нужно вот это?
   

$this->addIndex(array('site_id', 'order_num'),self::INDEX_UNIQUE);

И что это? Куда вы индекс добавляете?

1,680

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Купон грузится из корзины заказа где есть все orderitems. Т.е. сразу доступны все элементы. В Вашем случае, нужно получить формулу несколько по другому. У вас ведь не просмотр одного заказа.

1,681

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Всё очень просто. Вы фильтруете по типу товар, а не по типу купон. У Вас идентификаторы купона и товара разные. Так и должно быть. JOIN по этому и не сходится.
Вам наверное надо создать ещё одну промежуточную таблицу с полями order_id и discount_id. И при сохранении заказа писать в неё связь для всего заказа. Тогда можно через 2 JOIN объеденить то что Вам нужно.

1,682

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

В order_items у Вас есть entity_id, а в discount поле id.

1,683

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

У вас таблица order_discount кикие имеет общие поля? Какие вообще поля  Вас есть в обоих таблицах?

1,684

(2 ответов, оставленных в Вопросы по созданию тем оформления)

Всё дело в оштбки блока. Она будет исправлена в ближайшем обновлении. Если не хотите ждать, то откройте файл /modules/photo/controller/block/photolist.inc.php и строку:

$link_id = isset($route->$param) ? $route->$param : 0;

Меняете на:

$link_id = isset($route->$param) ? $route->$param : $param;

1,685

(15 ответов, оставленных в Вопросы по работе с системой)

Спасибо. Разберёмся.

1,686

(13 ответов, оставленных в Вопросы по работе с системой)

Укажите код, который использовали для удаления товара.

1,687

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Так у Вас же всё получилось?
\RS\Orm\Request строится по тем же правилам, что и обычные SQL запросы. Т.е. если Вы хотите подсоединить таблицу то можно использовать join, тогда у Вас появятся дополнительные колонки.
Обращение к основной таблице всегда с алиасом A.
Например:

$q = $this->api->queryObj();
$q->join(Ваша нужная к присоединению таблица, 'A.полеприсоединия=B.полеприсоединения', 'B') //INNER JOIN
->where(
      //Моё нужное условие в уже объединённой таблице
);

Если не знаете как составляется запрос join, то читайте документацию по MySQL:
http://phpclub.ru/mysql/doc/join.html
http://pionick.net/examples/mysql_join

и смотрите видео по запросам к БД в RS. Там тоже есть примеры с JOIN:
https://www.youtube.com/watch?v=n6ufZ2b … L4X2UTC6Aw

1,688

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Теперь понял. Ну тогда сделайте ещё join у объекта запроса. В чем проблема? smile У Вас же в $q объект.

1,689

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Не совсем понял, что хотите сделать. Поясните подробнее

Видео рассказывает как пользоваться конструктором сайта для изменения тем оформления. Рассмотрены аспекты со стороны обычного пользователя. Приведено несколько рабочих примеров для работы в нём. Описан функционал, показаны возможности сеточного вывода блоков. И многое другое.
Видео получилось большим, но и функционала не мало описано, плюс примеры.
Само видео будет здесь:
https://www.youtube.com/watch?v=7HGRpFO … mp;index=9
или в нашем разделе с видеоуроками

1,691

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Ну тут нужно не совсем то.
Вот эта конструкция:

function __construct()
    {
        parent::__construct(new \Users\Model\Api()); //Указываем API с которым будет возвращаться вывод
    }

Нужно указать здесь API для вывода информации. В Вашем случае, нужно обращение к таблице с элементами заказа, которая описывается в \Shop\Model\Orm\Orderitem. API которое с этими ORM объектами работает в данном случае не существует.
Поэтому Вы создёте у себя класс АПИ и указываете наследование от EntityList, и указать объект, с которым будет работать АПИ. Например:

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 для работы CRUD контроллера.

В самом helperIndex можно уточнить запрос по умолчанию, расширив его запросом. В этом классе сам объект апи находится в $this->api. Мы можешь получить объект запроса \RS\ORM\Request  через метод queryObj() . Ну например:

 
function helperIndex()
    {
        $helper = parent::helperIndex();
        $q = $this->api->queryObj();
        $q->where(
         //Моё нужное условие
        );

А сами поля вывода, если Вы заметили описываются здесь:

$helper->setTable(new Table\Element(array(
            'Columns' => array(
                new TableType\Checkbox('id', array('showSelectAll' => true)),            
                new TableType\String('id', '№', array('ThAttr' => array('width' => '50'), 'Sortable' => SORTABLE_BOTH, 'CurrentSort' => SORTABLE_DESC)),
                new TableType\String('login', t('Логин'), array('href' => $edit_pattern, 'Sortable' => SORTABLE_BOTH, 'linkAttr' => array('class' => 'crud-edit'))),                
        ))));

Поменяйте под себя.

1,692

(65 ответов, оставленных в Вопросы по работе с системой)

Всё получится. Не бросайте идею. Вы постучитесь к нам. Я посмотрю, что Вы сделали и скажу, что не правильно. В предыдущем посте идёт полностью рабочий код. Скорее всего, у Вас в POST приходит, что-то не то. Либо Вы чего-то недопоняли.

1,693

(15 ответов, оставленных в Вопросы по работе с системой)

Напишите нам в поддержку разберёмся. Всё должно работать.

1,694

(15 ответов, оставленных в Вопросы по работе с системой)

Может быть {$item->getPreview($length = 50)} ?

Нет всё правильно, {$item->getPreview(50)}.
$length то Вам зачем?

В Вашем случае, будет лучше если укажите признак показа в виде простого текста:

{$item->getPreview(50, false)}

Судя из страницы, что Вы привели, очень похоже, что там у Вас не тот шаблон выводит, эту страницу. Попробуйте проверить тестово выведя абракодабру.

1,695

(3 ответов, оставленных в Вопросы по работе с системой)

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

1,696

(3 ответов, оставленных в Вопросы по работе с системой)

Ничего здесь задвоеного нет.
У Вас просто показываются сверху текущая выбранная комплектация. Вы можете её переключить и информация сменится. Чуть ниже идут все характеристики. Т.е. все возможные значения.

1,697

(15 ответов, оставленных в Вопросы по работе с системой)

Конечно, ведь:

/**
* Возвращает краткий текст заданный пользователем, 
* а если он не задан, то сформированный из основного текста
* 
* @param integer $length - длинна текста
* @param boolean $html - выводить как HTML? 
*/
    function getPreview($length = 500, $html = true)

Т.е. {$item->getPreview(Нужная длинна в цифрах)}

1,698

(59 ответов, оставленных в Вопросы по разработке модулей и API системы)

Если нужно в публичной части, то:
Вам нужно будет создать свой front контроллер, который выведет нужную информацию. А также объявить маршрут Вашей страницы.
Все маршруты(типы адресов страниц) объявляются в функции getRoute в handlers.inc.php. Вы можете посмотреть его в любом модуле. Этот маршрут будет вести на front контроллер, если набран указанный Вами адрес.
Статья на эту тему вот здесь:
http://readyscript.ru/text-blog/Kak-pra … adyScript/

Например вот такой маршрут:

function init()
{
        $this
            ->bind('getroute'); //Объявляем хук маршрутов

}
    /**
    * Объявление маршрутов в системе 
    *
    */
    public static function getRoute($routes) 
    {

            
        //Ваш маршрут
        $routes[] = new \RS\Router\Route('custom-front-mycontroller', 
            '/custom/myurl/', null, t('Мой FRONT контроллер'));
        
        
        return $routes;
    }  

Соотственно по пути /custom/myurl/ он будет стучаться в Вам на /modules/custom/controller/front/mycontroller.inc.php

Если нужно в админ панели сделать раздел, то смотрим моё видео о меню.
https://www.youtube.com/watch?v=AeOKRd5 … mp;index=6


И копируем себе в модуль какой-либо админский контроллер, который Вам больше нравится, после чего переделываем под себя.

Попробуйте. Если не будет получаться скажите, только фрагменты кода приведите.

1,699

(65 ответов, оставленных в Вопросы по работе с системой)

Вообщем, решил повторить Ваш путь. Да действительно так не отработает, т.к. заказ это единственное место где используется в виду особенностей не update, а updateCartData. который относится к корзине в контроллере OrderCTRL. Поэтому делать надо так:

function init()
    {
        $this
            ->bind('controller.afterexec.shop-admin-orderctrl');
            
    }
    
    
    /**
    * Срабатывает после отработки контроллера сохранения заказа
    * 
    * @param string $result_html - готовый HTML, возвращаемый контроллером
    */
    public static function controllerAfterexecShopAdminOrderCtrl($result_html)
    {
        if (isset($_REQUEST['current_val'])){
  
            $config = \RS\Config\Loader::byModule('shop'); //Получам конфиг магазина
            $config['current_val'] = \RS\Http\Request::commonInstance()->request('current_val', TYPE_STRING, ""); //Записываем значение из поста
            $config->update(); //ЗДЕСЬ есть, т.к. сохраняется другой объект
        }
        return $result_html;
    }

Т.е. вешаясь на отработку контроллера.

1,700

(65 ответов, оставленных в Вопросы по работе с системой)

Не может такого быть. Вы видимо, что-то делаете не так. Постучись к нам в онлайн консультант когда мы онлайн, я посмотрю, что Вы делаете.
100% что-то очевидное.