Добрый день!

1,2. По остаткам пока изменений в системе не было. По срокам не могу ничего сказать, чтобы не обмануть.

Если в общем, то систему можно описать так:
Списание остатков пока происходит при оформлении заказа в клиентской части, перенос остатков обратно на склад происходит при перемещении статуса в "Отменен". Другой логики пока нет.

3. При установке статуса Отменен - остаток возвращается, если включена опция "Запретить оформление товаров, если их недостаточно на складе"

4. Нет, если отменить заказ то остатки вернутся на склад. Если после этого изменить статус, то изменений в остатках не будет. Возобновление заказа поле его отмены - довольно редкий сценарий.

5. Такой возможности - нет, но есть другая возможность. Насколько я понимаю, у вас есть заказы, которые не оплачиваются, и вам нужно возвращать товары на склад обратно. У нас есть опция - автоматически переводить заказ в нужный статус, если некий статус держится заданное время. Посмотрите в настройках модуля Магазин.

т.е. вы можете настроить: если заказ находится в статусе Новый 2 дня, то переводить его в статус Отменен. Так будет честнее по отношению к клиенту, что его товары будут резервироваться до оплаты.

6. Сейчас ничего не происходит. Если нужно вернуть остатки, нужно сперва отменять заказ, затем удалять.

Прошу прощения, в моей локальной версии такой метод уже есть - это сбило меня с толку. (он выйдет в будущих версиях).
А вот в 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;
    }

Я предположил по тексту вашей ошибки, что в $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
$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('Новый заголовок колонки');

Простое обновление файлов конечно не сработает.
Нужно полное удаление старой копии (включая БД) и установка новой с нуля, я об этом писал в предыдущем посте.

Александр правильно заметил, технически функция проверки и получения обновления никак не ограничивается в самом движке во время Trial периода.

А вот наши серверы не отдают обновление без авторизации по лицензионному ключу. Это сравнимо с тем, что наш сервер не пускает вас в личный кабинет без авторизации. Обновление - это уже часть пакета лицензирования, собственно этот сервис мы и продаем.

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

457

(7 ответов, оставленных в Документация ReadyScript)

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

Также в RS 3.0 войдет современная тема оформления, собранная по сетке Bootstrap, что будет являться отличным практическим примером.

Сборка шаблона по GS960 и Bootstrap максимально схожа по принципу, т.е. вы можете открыть наш шаблон /moduleview/catalog/product.tpl, например из темы perfume и посмотреть как получается в Smarty Цена, Название товара и все остальные переменные.

Единственным отличием - является то, что в GS960 секции имеют 1 значение ширины,
а в Bootstrap можно задать 4 значения ширины для разных разрешений. Более, существенных отличий - нет по части конструктора сайта. Соответственно отдельная документация по Bootstrap будет в 99% дублировать материал по GS960.

Если у вас есть ссылка на идеальную на ваш взгляд документацию по разработке тем по сетке к любому продукту, киньте пожалуйста ссылку, мы обязательно посмотрим, так как ищем наиболее удобную форму обучающих материалов по данной теме.

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

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

Рассматриваем Атол он-лайн как единственное качественное решение данной задачи.
Насчет сроков. Первая он-лайн касса была внесена в реестр только 14 февраля http://www.atol.ru/company/news/Pervaya … torgovli-/ а пользоваться ей можно будет только после официального запуска атол он-лайн, ориентировочно в марте. До этого выбивать чеки можно было разве что вручную.

3 раза в день (утром днем и вечером) планировщик проверяет открытые заявки на заказ товаров. Каждый заказ система открывает и проверяет наличие указанного в нем товара. Если наличие подтверждается, то вызывается отправка уведомления.

Если в заявке указан телефон, то уйдет SMS уведомление, при условии, что у вас подключен SMS сервис.
Если в заявке указан Email, То уйдет Email уведомление.
Если в заявке указан и телефон и Email, то уведомление уйдет по двум каналам клиенту.

После отправки уведомления, заявка автоматически закрывается.

-----
Если планировщик не работает, вы можете обрабатывать заявки вручную. Открываете заявку, звоните или пишете пользователю.

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

Вы можете подключать скрипты из PHP, например в вашем обработчике событий:

https://readyscript.ru/dev-manual/class … f9e0a365ad

\RS\Application\Application::getInstance()->addJs(.....)

Воспроизвел код на тестовом движке:
Обновите движок, пожалуйста, мы внесли небольшие исправления в контроллер oneclickctrl

вот точная корректировка:

1. Событие конкретно на данной странице редактирования называется: controller.exec.catalog-admin-oneclickctrl.edit
2. Метод обработчика controllerExecCatalogAdminOneClickCtrlEdit , соответственно.

Пробуйте.

Немного ошибся, маска имени события звучит как:
controller.exec.КОРОТКОЕ_ИМЯ_КОНТРОЛЛЕРА.ИМЯ_ДЕЙСТВИЯ

( https://readyscript.ru/dev-manual/dev_hooks.html )

Я в предыдущем примере кода забыл в конце указать ИМЯ_ДЕЙСТВИЯ.

соответственно названия будут чуть другие:

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

    public static function controllerExecCatalogOneClickCtrlIndex(\RS\Controller\Admin\Helper\CrudCollection $crud_collection)
    {
          //......
    }

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

проверяйте:

1. вызывается ли у вас обработчик для начала.
2. посмотрите какие кнопки в $bottomToolbar - в примере я подписал какой класс в данной переменной. (\RS\Html\Toolbar\Element) вы можете заглянуть в исходник класса, чтобы все понять, там все методы подписанные. Есть функция var_dump - очень рекомендуем ей пользоваться, чтобы понять что в переменных.

Для модификации кнопки из стороннего модуля следует выполнить следующее:

Алгоритм:
1. Перехватить событие controller.exec.catalog-oneclickctrl
2. Получить объект кнопки
3. Добавить атрибут.

Примерный код обработчика handlers.inc.php:
Не забудьте очистить кэш, чтобы система подхватила ваш обработчик

<?php
namespace ВАШМОДУЛЬ\Config;

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

    public static function controllerExecCatalogOneClickCtrl(\RS\Controller\Admin\Helper\CrudCollection $crud_collection)
    {
        /**
         * @var $bottomToolbar \RS\Html\Toolbar\Element
         */
        $bottomToolbar = $crud_collection['bottomToolbar'];

        /**
         * @var $button \RS\Html\Toolbar\Button\AbstractButton
         */
        $button = $bottomToolbar->getItem('create'); //Получаем объект кнопки
        $button->setAttr(array(
            'onclick' => 'ваш код'
        ));
    }

}

Добавьте в файл /core/rs/config/userfieldsmanager.inc.php
метод (мы его включим в след. обновление):

    /**
     * Возвращает структуру дополнительных полей
     * @return array
     */
    function getStructure()
    {
        return $this->structure;
    }

Вы можете получить placeholder так:

{$structure=$conf_userfields->getStructure()}
{$placeholder=$structure.gps.title}

467

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

Для Главной страницы мета-теги задаются в разделе "Веб-сайт -> Заголовки, мета-теги", нужно нажать кнопку  Добавить  и выбрать страницу "Главная страница"

Добрый день!

Алгоритм должен быть такой: Нужно перехватить событие controller.exec.КОРОТКОЕ_ИМЯ_КОНТРОЛЛЕРА.ИМЯ_ДЕЙСТВИЯ
в обработчике вы сможете получить объект RS\Controller\Admin\Helper\CrudCollection. Этот объект содержит коллекцию всех визуальных элементов на странице в админке. Там вы сможете найти объект фильтра и откорректировать его.

Пример использования события controller.exec.КОРОТКОЕ_ИМЯ_КОНТРОЛЛЕРА.ИМЯ_ДЕЙСТВИЯ, в схожих целях есть тут: https://readyscript.ru/text-blog/Kak-pr … adyScript/

Пожалуй самый простой вариант, вместо:

{$conf_userfields->getForm('gps')}

Просто вставить нужный вам HTML, так:

{$values=$conf_userfields->getValues()}
<input type="text" name="{$conf_userfields->getFieldName('gps')}" value="{$values.gps}" class="любой ваш класс" placeholder="Координаты для доставки">

По классу можете задать стиль

Я проверял на странице регистрации юзера /register/ , уточните вы на этой странице проверяете?

В данном случае в вашем обработчике вы просто обновляете maxLength и description у существующего поля surname, а вам необходимо удалить ранее установленный checker. Для этого ormInitUsersUser должен содержать следующее:

    public static function ormInitUsersUser (\Users\Model\Orm\User $user) 
    {
        $user['__surname']->removeAllCheckers();
    }    

Рады представить бесплатное мобильное приложение для курьеров и администраторов с возможностью оплачивать заказы через карт ридер пластиковых карт. Подробности здесь

473

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

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

Воспользуйтесь функцией "Перенаправлять на https" в разделе Управление->Сайты. В окне редактирования вашего сайта. Не нужно ничего настраивать в .htaccess

Минимальные требования - Windows 7 или выше.