Супер! Спасибо!

Всё достаточно просто Вам нужен хук для метода в контроллере.
Вот пример для одного из моих модулей:

<?php
namespace ArticleToEmail\Config;

use \RS\Orm\Type,
\RS\Html\Toolbar\Button;

/**
* Класс предназначен для объявления событий, которые будет прослушивать данный модуль и обработчиков этих событий.
*/
class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this
            ->bind('controller.exec.shop-admin-orderctrl.edit');
    }
    
    /**
    * Добавляем кнопку вниз
    * 
    * @param \RS\Controller\Admin\Helper\CrudCollection $helper
    */
    public static function controllerExecShopAdminOrderСtrlEdit(\RS\Controller\Admin\Helper\CrudCollection $helper){
        //Если редактирование происходит, то покажем кнопку
        $id = \RS\Http\Request::commonInstance()->request('id', TYPE_INTEGER, false);
        if ($id){
            /**
            * @var \RS\Html\Toolbar\Element
            */
            $bottomToolBar = $helper['bottomToolbar']; //Получаем сформированную нижнюю панель
            $router = \RS\Router\Manager::obj(); //Объект роутера
            $bottomToolBar->addItem(new Button\Save($router->getAdminUrl('send', array(), 'articletoemail-ctrl'), t('Отправить подписчикам'), array( //Добавление кнопки
                'attr'=> array(
                    'class' => 'crud-add'
                )
            )));
            $helper['bottomToolbar'] = $bottomToolBar; 
        }
        
    }
    
}

Всё достаточно просто Вам нужен объект \Catalog\Model\Orm\Offer. Именно он отвечает за вставку и обновлении комплектации. Все комплектации для товаров начинаются с нулевого сортировочного индекса (поле sortn). Остаток дописывается к соответствующему складу всегда. Поле numэто всего лишь сведения об общем остатке по складам.
Сведения об остатка на складах при добавлении комплектации указывается в соответствующем массив сведений с ключом
Для добавления программно комплектации Вам нужно сделать следующее:

$offer = new  \Catalog\Model\Orm\Offer();
$offer['product_id'] = 'id товара которому припиываем';
$offer['title'] = 'Название комплектации';
$offer['stock_num'] = array(
   'id склада' => 'Количество на складе'
);

offer->insert();

Обработка ключа stock_num происходит в методе afterWrite у это объекта (/modules/catalog/model/orm/offer.inc.php)

Если у Вас всего один склад, то его можно получить так:

$default_warehouse = \Catalog\Model\WareHouseApi::getDefaultWareHouse(); //Получаем объект склада с данными.
AleksC1976 пишет:

при выборе любого значения фильтра фильтра , например здесь http://full.readyscript.ru/catalog/elektronika/
выбранное значение встает вверху списка - так задумано - или это баг? - как сделать чтобы такого не было?

Так задумано. Выбранные фильтры уходят наверх для удобства.

Во первых надо обновится до последней версии движка.
Убедится что в папке /modules/catalog/controller/front/ нет файла list_products.my.inc.php иначе он будет перекрывать стандартный вывод товаров.
Также убедится что в папке /modules/catalog/controller/block/ нет файла sidefilters.my.inc.php иначе он будет перекрывать стандартный вывод фильтров.
Далее если у Вас старая версия шаблонов или свой переделанный из стандартного, то надо взять обновлённый шаблон и стили CSS соответственно, если своей темы нет, то всё должно и так заработать.
Рассмотрим пример на основе темы воздушная (perfume). Нам надо взять и заменить шаблон вывода фильтров. Для этого берём шаблон из
/templates/perfume/moduleview/catalog/blocks/sidefilters/sidefilter.tpl
и заменить им свой
/templates/ВАША ТЕМА/moduleview/catalog/blocks/sidefilters/sidefilter.tpl

2,281

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

По какой конкретно инструкции и как ставите?

2,282

(15 ответов, оставленных в Вопросы по Маркетплейсу)

Адрес пока обязательное поле, везде. Мы вскоре переделаем этот момент, но пока так.

Ну если открыть карточку товара /product.tpl в Вашей теме оформления, то там есть конструкция отвечающая за вывод:

     {if count($product.offers.items)>5} {* Если комплектаций больше пяти, то как выпадающий список*}
                            <select name="offer">
                                {foreach from=$product.offers.items key=key item=offer name=offers}
                                <option value="{$key}" {if $smarty.foreach.offers.first}checked{/if} {if $check_quantity}data-num="{$offer.num}"{/if} {if $catalog_config.use_offer_unit}data-unit="{$offer->getUnit()->stitle}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getCost('Зачеркнутая цена', $key)}"}' data-images='{$offer->getPhotosJson()}' data-sticks='{$offer->getStickJson()}'>{$offer.title}</option>
                                {/foreach}
                            </select>
                        {else} {* Как радиокнопки *}
                            {foreach from=$product.offers.items key=key item=offer name=offers}
                                <input value="{$key}" type="radio" name="offer" {if $smarty.foreach.offers.first}checked{/if} id="offer_{$key}" {if $check_quantity}data-num="{$offer.num}"{/if} {if $catalog_config.use_offer_unit}data-unit="{$offer->getUnit()->stitle}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getCost('Зачеркнутая цена', $key)}"}' data-images='{$offer->getPhotosJson()}' data-sticks='{$offer->getStickJson()}'>
                                <label for="offer_{$key}">{$offer.title}</label><br>
                            {/foreach}
                        {/if}

Соответственно нужно оставить только select

2,284

(15 ответов, оставленных в Вопросы по Маркетплейсу)

Был один бажок после удаления, мы его внесём в ближайшем обновлении.
У вас получилось запустить оформление?

2,285

(15 ответов, оставленных в Вопросы по Маркетплейсу)

Напишите доступы в админку

Не за что. Если будут вопросы пишите.

Сделать это можно путём вписывания метода getRoute в Вашем файле handlers.inc.php в папке модуля config.

Например так:

function init()
    {
        $this
            ->bind('getroute',null,null,1); //Назначение прослушки хука с высоким приоритетом (1)
    }
    
    /**
    * Возвращает маршруты данного модуля
    */
    public static function getRoute(array $routes) 
    {        
        //Страница оформления заказа
        $routes[] = new Router\Route('users-front-register', array(
           '/register/'
        ), array(
            'controller' => 'Папка Вашего модуля-front-registr', // Устанавливаем какой контроллер обрабатывает маршруты
        ), t('Регистрация своя'));
        
        return $routes;
    }

'Папка Вашего модуля-front-registr' - будет искать файл registr.inc.php в Вашем модуле

С битрикс уход это хорошо.
Если вы будете реализовывать собственным модулем, что правильно, то надо будет свой фронт контроллер назначить на отображение товаров. Т.к. у нас в системе действует система маршрутов, то каждому маршруту(тупо шаблон адреса) можно назначить обработку на свой фронт контроллер. Его можно отнаследовать от стандартного фронт контроллера каталога товаров, тогда надо будет поправить всего один метод.
Сделать это можно путём вписывания метода getRoute в Вашем файле handlers.inc.php в папке модуля config.

Например так:

function init()
    {
        $this
            ->bind('getroute',null,null,1); //Назначение прослушки хука с высоким приоритетом (1)
    }
    
    /**
    * Возвращает маршруты данного модуля
    */
    public static function getRoute(array $routes) 
    {        
        //Страница оформления заказа
        $routes[] = new Router\Route('catalog-front-listproducts', array(
            '/catalog/{category}/',
            '/catalog/'
        ), array(
            'controller' => 'Папка Вашего модуля-front-listproducts', // Устанавливаем какой контроллер обрабатывает маршруты
        ), t('Просмотр категории свой'));
        
        return $routes;
    }

'Папка вашего модуля-front-listproducts' - будет искать файл listproducts.inc.php в Вашем модуле

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

А вообще в очень скором времени мы откроем возможность добавления behavior функций и тогда можно будет вообще навесить свои методы дополниельно к классу апи. Например у апи каталога товаров можно будет назначить из Вашего модуля свой метод, который появится у этого апи. И его можно будет вызывать как обычный метод.

Город выбранный можно запоминать и в куках. Если пользователь не выбрал город, то подставлять какой-либо главный по умолчанию.
Кстати как будете добавлять поле? Через свой модуль? Или просто правкой файла?

У нас есть в планах добавить нужный Вам функционал. Скорее всего он появится уже в этом году, точную дату не скажу, но течении ближайших месяцев я думаю будет. Теперь по существу.
Оба варианта правильные.
Но надо учесть что во втором, надо правильно указать гуглу и яндексу что это зеркала, чтобы он за дубли Вас не наказал. Почитать как это сделать можно в документации самого яндекса. Плюсом будет второго метода, то что если цены по филиалам изменятся, то они будут правильно отображены, и можно указывать свои контакты под каждый сайт филиала.
В первом случае, реализовать такое тоже можно, Вы идёте в верном направлении. Но надо учесть то что при обновлении все файлы стандартные перезаписываются и Вам нужно если вы правите .inc.php файлы сделать их копии, только с другим окончанием (.my.inc.php), тогда будут подхватываться именно Ваши файлы. Либо реализовать всё через Ваш отдельный модуль. Остатки по складам храняться в таблице комплектаций, а не товаров. Если у Вас будет только одна комплектация(товар без дополнительных комплектаций). То можно просто делать INNER JOIN из таблицы комплектаций, чтобы фильтровать.
Плюсом будет отсутствие дублей.

Поэтому мне кажется более приемлимый 1 вариант, хотя и гемморойнее.

Ну либо дождаться когда выйдет наше решение. Но это не скоро.

2,291

(15 ответов, оставленных в Вопросы по Маркетплейсу)

Модуль надо вернуть.
404 у Вас скорее всего появляется, т.к. у Вас нет соответствующего шаблона в вашей папке, т.к. тема Ваша. Мы в следующих версиях внесём правки в движок, который будет подключать шаблон по умолчанию этого модуля если его не найдёт у Вас.
Что делать?
Нужно скопировать соответствующий шаблон себе. Для этого переходим в папку модуля
/modules/onepageorder/view/templates
копируем папку perfume и вставляем в туже папку, но меняем название perfume, на название папки Вашей темы оформления. Посмотреть её можно в Веб-сайт->Настройка сайта->строка с выбором шаблона.
После этого я думаю всё должно заработать

2,292

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

Ну всё дело на самом деле в CSS. Т.к. у Вас тема оформления адаптивная, то Вы можете указать блоку Категории товаров другой шаблон. Для это перейдите в Веб-сайт->Конструктор сайта->Страница по умолчанию и соответственно в нужный контейнер добавляем блок Категории товаров. В его настройках надо указать путь к шаблону молодёжной темы. Он находится по пути:
/moduleview/catalog/blocks/category/category.tpl (в теме молодёжная)
Далее нам надо в наш style.css скопировать стили для показа из молодёжной темы, файл там называется также.
Вообщем мы открываем файл style.css в молодёжной теме и копируем себе строки с стилями, которые содержат класс .category
По идее должно сработать.
Однако, надо учесть, что данная тема адаптивная и при сжатии страницы или появлении на планшете и тем более телефоне, нужно добавлять через media query стили под нужные разрешения.
Т.е. я говорю и том, что для идеального варианта, Вам нужно либо самой знать хорошо вёрстку, либо иметь подрукой верстальщика, который достаточно легко подправит стили под ваши нужды.

2,293

(15 ответов, оставленных в Вопросы по Маркетплейсу)

У вас своя тема оформления стоит. Не стандартная?

2,294

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

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

У Вас комплектации будут на сайте, или всё отдельными товарами?

2,296

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

Подскажите как прописывать вот для таких страниц http://www.******.ru/catalog/Predmety-mebeli/?p=6

Ну сморите во первых это категория, а мета теги для категорий задаются в разделе Товары -> Каталог товаров->Редактирование категорий при наведении(карандашик)->Вкладка Мета теги

Т.к. модуль SEO контроль имеет больший приоритет перед мета тегами, и есть правило, то отработает именно он. В правилах SEO контроля принимаются регулярные выражения начиная от корня без указания домена, т.к. туда попадает именно $_SERVER['REQUEST_URI']. Например для Вашего случая будет так:

^/catalog/Predmety-mebeli/$

А если конкретно для 6 страницы, то так:

^/catalog/Predmety-mebeli/?p=6

2,297

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

Хорошо. Спасибо за замечание! smile Поправим в ближайших версиях.

Не за что smile

2,299

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

Sergey T.
    Участник
    Неактивен

    Зарегистрирован: 2014-09-12
    Сообщений: 239
    Рейтинг: 11

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

Всё сделали верно.

2,300

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

С помощью модуля сео контроль исправить ситуацию невозможно. Как разработчики смотрят на решение этой задачи?

Нет ничего невозможного. SEO модуль должен действовать. Приведите пример страниц, где вы хотите указать мета-теги и не получается и указжите какое правило создаёте под него.