Если у вас задача: Использовать собственный код в контроллере регистрации, то

перегрузить стандартный контроллер можно двумя способами (оба описаны в нашей статье - http://readyscript.ru/text-blog/Kak-pra … yScript/):

1. Перегрузкой маршрута (рекомендуется)
2. Подменой класса (.my.inc.php)
--------------------------------------------------------------------

Если у вас задача - вставить при отправке SMS проверку разрешения от пользователя, то мне кажется вы выбрали оптимальный путь (доработав всего один класс (смс-транспорт) и полностью сохранив возможность обновления):

1. Создали доп. поле стандартными средствами в настройках модуля Пользователь. (насколько я понял)
2. Создали свой транспортный модуль для SMS, который проверяет данное поле. (это все равно нужно было бы делать, т.к. стандартный модуль не делает проверку на разрешение пользователя)

Не совсем понятно в чем костыльность вашего решения? (Возможно задача бы решалась проще, если бы было какое-нибудь событие перед отправкой SMS, которое бы можно было перехватывать и останавливать отправку.)
Или опишите, как бы вы хотели видеть реализацию вашей задачи?

752

(3 ответов, оставленных в Предложения по улучшению системы)

Думаю, Олег неверно понял вопрос. У автора все работает в корзине, он имел ввиду, что не хватает колонки Цена, в которой бы отображалась стоимость 1 шт. товара.

Это вопрос уровня шаблонов. Это в любой момент можно реализовать изменив шаблон корзины.
/shop/view/cartpage.tpl

Цена находится в поле single_cost. Вот пример:

Элементы корзины:<br>
{$product_items=$cart->getProductItems()}

{foreach $cart_data.items as $index=>$item}
{$product=$product_items[$index].product}
{$cartitem=$product_items[$index].cartitem}

Наименование: {$product.title}
Цена 1 шт.: {$item.single_cost}
Стоимость: {$item.cost} 
Скидка {$item.discount}

{/foreach}

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

С сегодняшнего дня доступен вывод средств с лицевого счета ReadyScript на карты Visa, Mastercard, Яндекс.Деньги, расчетный счет(для физических и юридических лиц).

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

Подробности тут

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

Если вы в одно время будете управлять одним сайтом и открывать только его в соседних вкладках - такой проблемы не будет.

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

Этот вопрос правильнее адресовать хостеру или принимающей стороне писем (почему они положили ваше письмо в спам). Движок формирует письмо обычной командой PHP - mail(), в которую передается Email получателя, тело письма, стандартные заголовки FROM, REPLY.

Непосредственно отправкой письма занимается ПО, установленное на хостинге (обычно exim). Письма могут попадать в спам по огромному числу причин:

1. IP сервера в спам-листах, IP целой подсети в спам-листах, домен в спам листах.
2. Отсутствие необходимых подписей или заголовков письма (DKIM,....)
3. Наличие в письме по мнению фильтрующих программ спам-слов
4. Внутренние алгоритмы, фильтры, ограничения принимающей стороны. (наличие жалоб на спам на подобные письма, и.т.д.)

Возможно просто достаточно однажды вытащить письмо из спама вручную и mail.ru будет класть далее эти письма во входящие? (проверили, с наших тестовых аккаунтов на mail.ru письма успешно доходят, не в спам)

У нас на доменах .local и .test - не происходит блокировок.  Видимо у вас что-то не так настроено.

Попробуйте удалить папку /cache. Убедитесь, что из PHP можно обратиться к ВАШЕМДОМЕН.local  и у вас действительно открывается ваш сайт. Пример файла для проверки доступности локального домена.

<?
echo file_get_contents('ВАШДОМЕН.local/robots.txt');

должен вернуть содержание вашего robots.txt

Если необходимо выполнить следующий запрос:

SELECT COUNT(*)
FROM products as A
INNER JOIN second as B ON A.id = B.product_id
WHERE A.num > 0;

Можно сделать это так:

1 способ. С помощью запроса через \RS\Orm\Request

  $result = \RS\Orm\Request::make()
    ->from(new Orm\Product, 'A')
    ->join(new Orm\Second, 'A.id = B.product_id', 'B')
    ->where('A.num > 0')
    ->count();

т.е. можно создать метод в вашей модели, например getSomethingCount() и реализовать в нем такой запрос.


2 способ. С помощью стандартных \Catalog\Model\Api и метода getListCount();

$product_api = new \Catalog\Model\Api();
$product_api->queryObj()
    ->join(new Orm\Second, 'A.id = B.product_id', 'B')
    ->where('A.num > 0');
  
$result = $product_api->getListCount();

т.е. метод queryObj() возвращает текущий объект \RS\Orm\Request, который загружен в API, соответственно там по умолчанию уже присутствует часть запроса

\RS\Orm\Request::make()
    ->from(new Orm\Product, 'A')

и вам остается только добавить недостающую часть.

758

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

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

2. У нас есть массовое редактирование. Вы можете зайти в определенную категорию, поставить флажок "Выбрать товары на всех страницах" ( http://readyscript.ru/manual/user_admin_elements.html ), внизу нажать на кнопку Редактировать. В открывшемся окне установить флажок "Показывать товар"

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

Это наверняка разовая история.

Вы можете удалить фото через базу из таблицы ..._images
После удаления записей из базы нужно зайти в раздел Веб-сайт->Настройка модулей->Блок фотографий и выбрать справа "Удалить несвязанные фото". Данная операция удалит файлы изображений со всеми миниатюрами, на которые нет ссылок в базе.

После этого загрузите массово новые изображения.

1,2. Удалять фото у товаров можно только через карточку товара в админ. панели.

3. При импорте фото из ZIP, происходит сравнение по имени файла фото.
Если фото с таким же именем было загружено к товару раннее, то оно повторно загружаться не будет.
Т.е. работает правило - либо добавляю либо пропускаю.

Эта ошибка с остатками была исправлена достаточно давно. Вы используете самые свежие версии системы?

762

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

Что нужно для работы системы уведомлений с сайта?

1. Заполнить Email администратора в разделе Веб-сайт->Настройка сайта
2. Заполнить поле От(From), Reply, в разделе Веб-сайт->Настройка сайта->Уведомления.

В поле From, Reply - нужно указывать Email с доменом, на котором находится ваш сайт. Например info@yoursite.ru

Если ваш сайт имеет кирилический домен, то адрес необходимо указывать в punycode.
вот здесь можно получить Puny представление вашего домена: http://r01.ru/domain/whois/instruments/converter.php

Пример: для сайта тестовыйсайт.рф, email будет выглядеть так: info@xn--80adirb0auddcg7h.xn--p1ai

Если после заполнения указанных выше полей письма не приходят (обязательно посмотрите в папке СПАМ), то 90% (по статистике обращений в нашу поддержку) - это проблема на хостинге. Можно провести небольшой тест, чтобы узнать работает ли отправка писем на хостинге, для этого нужно создать тестовый файл test.php в корне сайта, следующего содержания.

<?php
$to            = 'YOUREMAIL@MAIL.RU'; //Здесь укажите ваш Email
$subject    = 'the subject';
$message = 'hello';
$headers   = 'From: webmaster@example.com' . "\r\n" .
    'Reply-To: webmaster@example.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

var_dump(mail($to, $subject, $message, $headers));

Далее нужно запустить созданный скрипт через браузер http://ВАШСАЙТ.RU/test.php.
Если вы увидите в браузере false или вам не придет письмо, значит на хостинге действительно существует проблема с отправкой письма. В этом случае нужно писать в поддержку хостинга со ссылкой на ваш тестовый файл test.php

763

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

Насколько я понял вы внесли изменения в стандартный файл Smarty core/smarty/plugins/modifier.date_format.php,
чтобы добавить поддержку русских месяцев и формата вывода "23 ноября 2015".

Оригинал мы изменять не можем, для поддержки простого обновления дистрибутива Smarty внутри ReadyScript с официального сайта Smarty.

Но это и не нужно, потому что у нас уже есть плагин, нашего производства, который делает то, что вам нужно.
Он называется "dateformat" (без подчеркивания) располагается в папке /core/smarty/rsplugins/modifier.dateformat.php, он поддерживает весь набор стандартных инструкций обычного плагина date_format + дополнен конструкциями:

  • %k - отображает сколько времени назад произошло событие "сегодня","вчера", "N дней назад", если больше месяца, то пишет дату "23.02.2010".

  • %v - отображает месяц на русском языке "января", "февраля",....

  • @time - возвращает время в формате ЧЧ:ММ

  • @date - возвращает дату в формате ДД.ММ.ГГГ

  • @sec - возвращает кол-во секунд

  • %datetime - возвращает дату и время в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС

Как этим пользоваться?

{$date = '2014-01-20 10:30:00'}

//Нужно вывести дату в форме "20 января 2014"
{$date|dateformat:"%d %v %Y"}

//Нужно вывести дату в форме "[Сегодня|Вчера|5 дней назад|20.01.2014], в 10:30".
{$date|dateformat:"%k, в @time"}

764

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

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

Да, вы можете загрузить GIF анимированный баннер,
необходимо будет только использовать флажок "Использовать оригинал файла для вставки" непосредственно в окне редактирования баннера. (Чтобы система не пережимала его и соответственно не терялась анимация)

Вы также можете загрузить и Flash баннер, но необходимо будет подкорректировать шаблон баннера
/modules/banners/view/blocks/bannerzone/zone.tpl или /modules/banners/view/blocks/slider/slider.tpl, стандартно там используется
<img src="{ссылка на баннер}">, а в случае с flash Баннером нужно будет использовать что-то вроде:

<object width="280" height="600" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,18,0" 
type="application/x-shockwave-flash" data="{ссылка на баннер}">
    <param name="quality" value="high" /> 
    <param name="scale" value="noborder" /> 
    <param name="salign" value="t" /> 
    <param name="wmode" value="opaque" /> 
    <param name="src" value="{ссылка на баннер}" /> 
    <embed width="280" height="600" id="linebanner" src="{ссылка на баннер}"> </embed> 
</object>

766

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

Пример использования SEO генератора есть у нас в блоге http://readyscript.ru/text-blog/Novye-v … adyScript/.

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

Это делается - копированием /modules/shop/config/handlers.inc.php в
/modules/shop/config/myhandlers.inc.php

myhandlers.inc.php должен быть примерно такого содержания (код не проверял, возможны синтаксические ошибки):

<?php
namespace Shop\Config;

class MyHandlers extends Handlers
{

    public static function getMenus($items){

        $items = parent::getMenus($items);        
        //Перебираем пункты меню и модифицируем ссылку у нужного
        foreach($items as &$item) {
              if ($item['alias'] == 'allorders') {
                   $item['link'] = '%ADMINPATH%/shop-orderctrl/?f[dateof]='.date('Y-m-d');
              }
        }

        return $items;
    }
}

Это очень странно. На факт оплаты у нас нет условий на списание остатка товара.

У нас в коде установлено простое условие, если включена указанная выше опция,
то всегда при создании заказа списывать товар со склада, выбранного вручную в случае самовывоза или "по-умолчанию".

Проверьте, у вас хотя бы один склад отмечен, как склад "по-умолчанию"?
Проверьте, пожалуйста, на вкладке Комплектации - количество уменьшается?

Если включена опция - "Запретить оформление заказа, если товаров недостаточно на складе"
в разделе Веб-сайт->Настройка модулей->Магазин, то в системе включится учет остатков,
при оформлении заказа количество товара будет уменьшаться.

Чтобы изменить баланс пользователя, необходимо вызвать метод:

$transactionApi = new \Shop\Model\TransactionApi();
$transactionApi->addFunds($user_id, $amount, $writeoff, $reason);

//$user_id - ID юзера
//$amount - сумма
//$writeoff - флаг списания. Если true, то сумма $amount списывается, false - добавляется
//$reason - комментарий к операции
$transactionApi = new \Shop\Model\TransactionApi();
$transactionApi->addFunds(123, 25.50, false, 'Пополнение баланса пользователя на 25 руб 50 коп. пользователя ID 123');

$transactionApi = new \Shop\Model\TransactionApi();
$transactionApi->addFunds(123, 25.50, true, 'Списание 25 руб. 50 коп. с баланса у пользователя ID 123');

771

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

Поменять название сайта можно в разделе Управление->сайты

Поменять КПП на ОГРН можно скопировав шаблон /modules/shop/view/printform/commoditycheck.tpl
в /templates/{ВАША ТЕМА}/moduleview/shop/printform/commoditycheck.tpl

И поправив его как вам угодно в папке назначения.

772

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

По tvrain.ru - это точно не к нам.

Уважаемые участники форума!

Спешу сообщить о том, что у нашей компании открыты официальные группы ВКонтакте и Facebook, в которых наши специалисты по SMM размещают полезные статьи на тему электронной коммерции и интернет-маркетинга. Приглашаю Вас стать частью нашего сообщества и оперативно узнавать обо всех наших новостях (в том числе скидках и акциях) и тонкостях ведения торгового бизнеса в сети. Группы представлены у нас на главной странице здесь

Прямые ссылки на группы:

ReadyScript ВКонтакте - https://vk.com/readyscript
ReadyScript Facebook - https://www.facebook.com/readyscript.ru

Заказ (объект класса \Shop\Model\Orm\Order) - это ORM объект, который до вызова метода insert() хранит свои свойства в сессии.

В контроллере \Shop\Controller\Front\Checkout в методе actionConfirm есть строка

//Создаем заказ в БД
 if ($this->order->insert()) {
    //....
 }

Именно этот код дергает механизм сохранения данных в БД.

Я не учел, что вы выставляете тип цен только во время события - cart.addproduct.
Вам тогда нужно в обработчике события cart.addproduct писать цену пользователя в $_SESSION['КАКАЯ_НИБУДЬ_ПЕРЕМЕННАЯ']

А потом сделать еще один обработчик события start и уже в нем вызывать:

if (  $_SESSION['КАКАЯ_НИБУДЬ_ПЕРЕМЕННАЯ'] ) {
\Catalog\Model\CostApi::setSessionDefaultCost( $_SESSION['КАКАЯ_НИБУДЬ_ПЕРЕМЕННАЯ'] );
}

------

\Catalog\Model\CostApi::setSessionDefaultCost() - устанавливает текущую цену на одну сессию выполнения PHP (не путать с SESSION).  Т.е. её нужно вызывать её каждый раз.