2,576

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

Вы используете стандартную тему оформления?

2,577

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

А у меня не получилось почему-то настроить Email уведомления магазина. Можно по шагам для совсем чайников?
С какой почты будет отправляться?
Поле "От " заполнила.

И восстановление пароля тоже на почту не приходит.

А вы вообще от куда и куда слать будете письмо? Я имею ввиду почтовые ящики и какой у вас домен с которого отправляете?
Можете часть букв закрыть "*"

Не за что)

Ну что получилось?

2,580

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

Нашёл решение проще:

Удалите папки /modules/exchange, /modules/partnership, /cache
В файле /package.inc.php заменить строку Shop.Full на Shop.Middle

2,581

(2 ответов, оставленных в Сайт ReadyScript)

Кстати возможна и подобная проблема Схожая тема.

2,582

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

А Вы справа от полей мета-тегов на вопросик наведитесь. И кстати {title} пишется внутри без пробелов.

Ну пока это не предусмотрено, но решение логичное. Напишите пожалуйста нам в сервис пожелание, мы когда доберёмся сделаем.
Ссылка на пожелания 

2,584

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

Обратный путь не предусмотрен насколько я знаю, только в большую сторону можно. Вам надо будет поставить в другую папку на сервере Маркет версию. Например сделав поддомен.
А из первой папки с шаблонами скопировать свой шаблон в папку с шаблонами второй папки.
Что касается данные товаров. То Вы можете выгрузить все данные с помощью CSV, фотографии все хранятся в папке /storage/photo/original(Её тоже скопировать). Затем загрузить CSV на другом поддомене и все Ваши товары будут проимпортированны.
В конце просто переименуете папки между собой. А поддомен который будет ссылаться на уже первую папку вместо второй просто удалите.
Примерно так.

Добрый день.
Ну чтож, тут есть сразу не сколько решений. Давайте Рассмотрим всё по порядку:

Вариант 1
Нами к smarty(шаблонозатор системы) написан плагин, который позволяет вызывать статический метод  у любого класса системы прямо в шаблоне, главное чтобы это был метод public static
Т.е. допустим у Вас имеется свой собственный класс по пути \Custom\Model\CustomApi и метод loadInfo. Чтобы его вызвать нужно воспользоваться следующей конструкцией:

В шаблоне

{* $list - список Ваших объектов *}
{$list}

{* Вызов метода loadInfo в \Custom\Model\CustomApi *}
{static_call var=new_list callback=['\Custom\Model\CustomApi','loadInfo'] params=[$list]}

Таким образом мы сделаем аналог вызова функции вот так:

$new_list = \Custom\Model\CustomApi::loadInfo($list);

Т.е. в шаблоне все данные, которые будут возвращены в шаблон, возвратятся в $new_list

В Вашем классе надо будет сделать так

/**
*
* @param array $list - массив входящих объектов
*/
public static function loadInfo($list){
    //Пройдёмся в цикле по списку
    foreach ($list as $k=>$item){
       //Получим объект товара сделав запрос к таблице товаров через \RS\ORM\Request 
       $product = \RS\ORM\Request::make()
                             ->from(new \Catalog\Model\Orm\Product()) //Укажем что запрос будет в таблицу товаров
                             ->where(array(
                                   'id' => $item['product_id'] 
                             ))
                             ->object(); //Получим объект \Catalog\Model\Orm\Product
       
       //Ну или вот так ещё короче $product= new \Catalog\Model\Orm\Product($item['product_id']);
        
       $list['product_title'] = $product['title']; //Создаём новый ключ массива, куда и запишем значение названия товара
       //Или можно записать весь объект
       $list['product'] = $product;
       return $list;
    }
}

Получить ссылку на товар можно тогда так:

{$new_list.0.product->getUrl()}
{*
   Аналог
   $new_list[0]['product']->getUrl();
*}

Подробнее метод static_call описани в документации


Вариант 2
Если используете блок контроллер или front контроллер, то можно прямо в контроллере подгрузить эти сведения о товаре. Например через join.
Рассмотрим на примере:
Допустим Вы запросом получаете сведения из одной таблицы, и вам нужно прикрепить данные из другой таблицы.

//Получим список комплектаций с подгруженным полем из товара
$list = \RS\Orm\Request::make()
                 ->select('O.*, P.title as product_title') //Выбрать только все поля таблицы комплектаций и одно поле товара
                 ->from(new \Catalog\Model\Orm\Offer(),'O')  //Запрос к такблице комплектаций с алиасом O
                 ->join(new \Catalog\Model\Orm\Product(),'O.product_id=P.id','P') //Join к таблице товаров с алиасом P
                 ->where("O.product_id>0") // WHERE  O.product_id>0
                 ->objects();

2,586

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

У вас на хостинге стоит ограничение в 2 МБ на загрузку файлов. Обратитесь в хостинг для увеличения этого параметра post_max_size и upload_max_filesize.

2,587

(2 ответов, оставленных в Сайт ReadyScript)

Видимо у Вас совсем слабый хостинг. Скажите(хостингу) чтобы поставили хотя бы 5 минут для Вашего хостинга. max_execution_time

Ну конечно. У меня Текущая комплектация системы: Shop.Full. Версия ядра: 2.0.0.132.
Скачайте новый дистрибутив. Или обновитесь.
Там уже функционала ещё целая тонна добавилась.

Проверил у себя. Всё показывается. Может вы что-то не так делаете?

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

А у вас случайно шаблон не старый? Я просто посмотрел, вроде должно отображаться.

А какой вы тип ставите?

Забыл сказать, и style.css ещё. Но там легко будет сравнить, по сервису который я привёл в прошлом посте

Ну там многие вещи изменились. Проще всего сравнить файлы через вот этот сервис.
А файлы поменялись:
1. product.tpl - страница товара,
2. show_complekts.tpl - показ комплектаций и
3. jquery.changeoffer.js.

Получить авторизованного пользователя можно так:

$user = \RS\Application\Auth::getCurrentUser()

Для работы с БД я на этой странице постарался описать.

Здравствуйте.
Итак нам нужно изменить количество товара. Сведения о количестве товаров хранятся в разрезе складов и комплектаций. По умолчанию к товару создаётся 1 комплектация где хранятся сведения о количестве данного товара. Если комплектаций больше, то соотвественно для каждой комплектации хранится своё количество товара на складе.
Поэтому нужно:
1. Подгрузить товар.
2. Вызвать у него заполнение количества комплектаций и остатков их.
3. Составить новый массив комплектаций с изменениями по количству на складе, привоив их товару.
4. Обновить товар.

Вот как это выглядит:

$product_id = 27452; //id товара
  
  $plus_value = 2; //Количество на которое увеличися товар
  
  //Подгрузим сам товар
  $product = new \Catalog\Model\Orm\Product($product_id);
  
  //Заполняем сведения об остатках на складах товара и имеющихся комплектациях, значения появятся в ключе offers
  $product->fillOffersStock();
  
  //Получим склад по умолчанию через запрос к БД использую ORM Request
  $warehouse = \RS\Orm\Request::make()
        ->from(new \Catalog\Model\Orm\WareHouse())
        ->where(array(
            'site_id' => \RS\Site\Manager::getSiteId(), //На текущем сайте
            'default_house' => 1 //Флаг по умолчанию включён
        ))
        ->object();
        
  //Получаем все комплектации
  $offers = $product['offers']; 
  
  //Эти строки показывают общую картину что подгрузили и как это выглядит. Комлектации находятся в ключе offers      
  echo "<pre>";
  var_dump('warehouse', $warehouse);
  var_dump('product', $offers);
  echo "</pre>"; 
  
  //Пробежимся по комплектациям и изменим количество, задав новые значения комплектациями
  $new_offers = array();
  foreach ($offers['items'] as $k=>$item){
     //Т.к. товар это объект \Catalog\Model\Orm\Product, то обращение к нему как к массиву происходит так, иначе Notice 
     $stock_num                   = $item['stock_num'];
     $stock_num[$warehouse['id']] = $stock_num[$warehouse['id']]+$plus_value;
    
     $item['stock_num'] = $stock_num;
     
     $new_offers[$k] = $item;
  }
  
  $product['offers'] = $new_offers;
  
  //Вызываем обновление у товара. В функции afterWrite класса \Catalog\Model\Orm\Product произойдёт обновление
  $product->update();

Получить значение из POST можно так к контроллере:

$this->request('product_id',TYPE_INTEGER,0); //Получение переменной из $_REQUEST, product_id где ожидается что это число.

Строка:

use \Product\Model\Orm\Product

Все го лишь отвечает за, то что вы можете вместо

\Product\Model\Orm\Product::loadByWhere();

Сделать так

Product::loadByWhere()

Т.е. использовать сокращённый alias

2,598

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

семь бед - один reset)

Насколько я понял, нужно у нескольких товаров отобразить нужный нам лейбл. В данном случае это "Хит".
Это можно сделать так:
1. Товары присвоить спец. категории "Хит"(создав её).
2. У спец. категории "Хит" загрузить картинку(зависит от шаблона, см. ниже) и указать значение в поле "Псевдоним" если поле пустое, например нажав на кнопку со стрелками. Например записать значение "hit"(без ковычек).
3. Нужно отредактировать нужный Вам шаблон.
В шаблоне все сводится к тому, что в шаблоне у объекта товара нужно вызвать метод inDir, который проверяет принадлежит ли данный товар нужной категории.

{$product->inDir('Псевдоним категории')}

В нашем случае это:

{$product->inDir('hit')} //Проверяем принадлежит ли товар категории с псевдонимом - hit

Если например рассматривать тему оформления "fashion" , а именно шаблон

/templates/moduleview/catalog/list_products.tpl - список товаров

В нём есть строчка:

{if $product->inDir('new')}<i class="new"></i>{/if}

Т.е. если товар принадлежит категории с псевдонимом - new, то эта строка будет добавлена.
Если нам нужно добавить ещё и "Хит". То делаем так.

{if $product->inDir('new')}<i class="new"></i>{/if}
{if $product->inDir('hit')}<i class="hit"></i>{/if}

После чего можно добавить класс в style.css, который будет делать бэкграунд с картикой.

.products li .image .hit{
    position:absolute;
    width:102px;
    height:20px;
    top:9px;
    left:1px;
    background: url(../img/КАКАЯ-ТО КАРТИНКА ХИТА продаж) no-repeat;
}


Ну или просто дописать что это хит.

В начале я также упоминал о том, что и у категории можно указывать картинку. В случае описанном выше этого делать не нужно, т.к. браться картинка будет из css файла.
Чтобы это использовать в нашем шаблоне категорию надо предварительно подгрузить и проверять у неё наличие фото.

Вот как это может выглядеть:

{foreach from=$product->getMySpecDir() item=spec}
{if $spec.image}
    <img src="{$spec->__image->getUrl(62,62, 'xy')}">
{/if}
{/foreach}

Подсмотреть можно в теме по умолчанию в файле /modules/catalog/view/list_products.tpl

И далее правите вёрстку под Вашу тему по вкусу.

Дело в стилях. 100%.
Даже это видно из скриншотов. Стили, которые вы просто скопировали перемешались с уже существующими в системе стилями.
Для отображения фильтров в шаблона из которых вы переделываете используется jquery плагин formstyler, который как раз и стилизует все галочки, делая их <span> и отслеживает нажатие.
Проинспектируйте с помощью firefox и можете сами всё увидеть.
Что касается вашего случая(первая картинка). Вам надо эти галочки скрыть. Например поместив их в скрытый контейнер <div>. Т.к. цвет это обыкновенная ссылка, то вам надо будет просто отловить нажатие на эту ссылку с помощью javascript и затем вызывать у checkbox событие change. Например, если вы используете jquery, то это может выглядеть примерно так.

<script type="text/javascript">
  $(document).ready(function(){ //Когда DOM готов
       $(".block-colors a").on('click',function(){ //Нажатие на ссылку с цветами 
           var parent = $(this).closest('li'); //Обращаемся к лижайшему <li>, он будет родителем от которого искать детей
           var chk = $("input[type='checkbox']",parent); //получили нашу галку
           chk.prop('checked',!chk.prop('checked')); //Сменим состояние галки
           chk.change(); //Сгенерируем событие, что галка изменилась.
       });
  });
</script>

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