Будет поддержка следующего синтаксиса:

<свойство товара>[<символ-разделитель><номер изображения>].<расширение файла>

т.е. можно будет назвать файлы, например так:
articul.jpg
articul.01.jpg
articul.02.jpg

чтобы импортировать несколько фото к одному товару.

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

Сейчас это можно сделать с помощью CSV, через колонку Фото. Т.е. необходимо залить папку с фото на сервер, и в CSV для каждого товара прописать путь к фотографиям относительно корня сайта. Вы можете увидеть эталонный CSV, если сделаете экспорт.

Но у нас сейчас на тестировании уже находится модуль, который будет позволять быстро загружать массово фото к товарам, для случая если имена файлов изображений точно равны одному из параметров товара (Артикул, Название, URL имя, Категория, Бренд, ID, XML_ID). Срок публикации данного функционала до 5ти дней.

Да, с категорий тоже нужно ставить редиректы. Готовьтесь к тому, что ваш старый сайт пропадет в скором времени из поиска и вы его сможете удалить. В помощь: https://help.yandex.ru/webmaster/yandex … g-site.xml

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


Насчет редиректа, его можно делать на разных уровнях (через htaccess) или на уровне PHP.
Если через htaccess, то верно все делаете, вот есть хороший материал на этот счет. Не забудьте только убедиться у вашего хостинга, что включен модуль mod_alias для apache, чтобы это работало.

Если через PHP, то можно составить примерно такого содержания файл

<?
$redirect_map = array (
  'ОТНОСИТЕЛЬЙ ПУТЬ НА СТАРОМ САЙТЕ' => 'ОТНОСИТЕЛЬНЫЙ ПУТЬ НА НОВОМ САЙТЕ',
  '/ventilyaciya/reshjotki/plastikovye' => '/ventilyaciya/reshjotki-plastikovye',
  '/ventilyaciya/reshjotki/welevye' => '/ventilyaciya/reshjotki-welevye',
  '/ventilyaciya/reshjotki/kruglye-diffuzory' => '/ventilyaciya/reshjotki-kruglye-diffuzory',
);

if (isset($redirect_map[$_SERVER['REQUEST_URI']])) {
    $domain = 'http://ВАШ_НОВЫЙ_ДОМЕН.RU';
    header('location: '.$domain.$redirect_map[$_SERVER['REQUEST_URI']], null, 301);
    exit;
}

Сохранить данный файл в корень, например с названием redirect.php, и подключить его в точке входа вашего старого движка (обычно index.php) с помощью конструкции require('redirect.php'); в самом начале файла.

Намного проще сделать 301 редиректы со старых урлов товаров на новые. Возможно вам данный вариант подойдет?

Простого способа это сделать - нет.  Так как вы хотите убрать якорь из маршрута, который придает ему уникальность по сравнению с другими урлами на сайте. Будет необходимо влазить в глубины маршрутизации. Ну и конечно все URL_имена категорий перечислять в маршруте к категории и товару.

Если с категориями все не так сложно, можно видоизменить маршрут

        //Просмотр категории продукции
        $routes[] = new \RS\Router\Route('catalog-front-listproducts', array(
            '/catalog/{category}/',
            '/catalog/'
        ), null, t('Просмотр категории продукции'));

Примерно таким образом (перечислив все идентификаторы категорий, чтобы обойти конфликты с другими маршрутами):

        //Просмотр категории продукции
        $routes[] = new \RS\Router\Route('catalog-front-listproducts', array(
            '/{category:(demo-produkty|elektronika)}/',
            '/catalog/'
        ), null, t('Просмотр категории продукции'));

То с формированием Урлов для товара придется переделать его стандартный маршрут, примерно на такой:

        
        //Карточка товара
        $routes[] = new \RS\Router\Route('catalog-front-product', 
            '/{category:(demo-produkty|elektronika)}/{id}/', null, t('Карточка товара'));

И переделать метод getUrl у объекта \Catalog\Model\Orm\Product, необходимо дописать передачу
параметра category в маршрут, так как стандартно там передается только id

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

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

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

Наоборот, можете удалить все миниатюры /storage/photo/resized, они будут создаваться постепенно, пока пользователи будут обходить ваш сайт. Это даст небольшой запас времени.

Единственное что можно удалить - это папку storage/tmp - если она у вас есть.

Для системного решения, конечно нужно место срочно увеличивать. Благо сейчас место на диске почти ничего не стоит.

Тот же DigitalOcean 20GB, SSD, 512MB,  - 5$/мес.

В интернете - не существует однозначного ответа каким должен быть урл, со слешем в конце или без (http://imperacms.ru/articles/seo/url-so … avilno.htm),
а соответственно можно выбрать как один вариант, так и второй. Мы выбрали вариант со слешем в конце.

URL без слеша в конце - это неизвестный для системы URL, поэтому система возвращает 404. Система однообразно ведет себя для всех неизвестных адресов, а именно отдает 404.

По правильному должен быть редирект на страницу со слешем.

Если он вам нужен, вы можете создать правило в .htaccess.
Не думаю, что он нужен всем, так как адреса внутренних страниц вручную никто не набирает вслепую,
а поисковики берут те адреса, что представлены на сайте. Соответственно никакой проблемы - нет.

Редиректы нужны только в случае, если страница была, например, раннее доступна как по адресу со слешем, так и без, чтобы исключить дубли. А в нашем случае все корректно - только со слешем в конце, без слеша страницы никогда не были доступны поисковикам - там 404.

Вероятно, что данное правило может сломать урлы с параметрами (надо проверить):

/catalog/категория/?page=2
/catalog/категория/?f[id_характеристики]=значение_харктеристики

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

Если вам необходим больший объем данного поля, вы все правильно сделали, что увеличили его индивидуально для себя.

Это можно сделать:
1. просто в базе, тогда это будет до первого обновления модуля "Блок фотографий",
2. можно сделать с помощью дополнительного модуля (рекомендуемое решение), и обработки в нем события инициализации ORM объекта Photo\Model\Orm\Image

Примерно таким обработчиком (handlers.inc.php):

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

class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this
            ->bind('orm.init.photo-image');
    }

    /**
    * Модифицируем ORM объект - "изображение"
    * 
    * @param \Photo\Model\Orm\Image $image - объект "изображение"
    */
    public static function ormInitPhotoImage(\Photo\Model\Orm\Image $image)
    {
        $image->__servername->setMaxLength(255);
    }
}

Не забудьте переустановить модуль "Блок фотографий" (ссылка в настройках модуля), после активации вашего стороннего модуля. Система в этом случае сама изменит длину поля в базе.

3. Можно сделать с помощью создания image.my.inc.php, у которого изменена длина поля в стандартном описании полей. (не рекомендуемый способ)

Вот так можно:

{if $product->isOffersUse()}
    {foreach $product.offers.items as $key=>$offer}
        {if $offer.num>0} {* offer.num - общий остаток комплектации на всех складах *}
            {if !$offer@first}, {/if}{$offer.title} {* название комплектации *}
        {/if}
    {/foreach}
{/if}

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

Просто замените двойные кавычки на &quot; перед импортом с помощью автозамены.

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

В случае, если система не находит в скобках идентификатор валюты, то она устанавливает стоимость в базовой валюте.

839

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

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

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

Покупка в 1 клик - это аналог "Заказать звонок менеджера". Поэтому этот инструмент носит информационный характер для администраторов. И предусматривает, что менеджер перезвонит клиенту и создаст полноценный заказ в админ. панели. В шаблоне есть переменная - $is_auth, которая принимает значение true, если пользователь авторизован, можете её использовать.

841

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

Нет, все не совсем так.
В 1С выгружаются все заказы, которые удовлетворяют заданным в настройках модуля обмена условиям, а именно статусам.

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

842

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

Да, так можно.
Только убедитесь, что в настройках модуля обмена на вкладке "Каталог товаров", опция "Что делать с товарами, отсутствующими в файле импорта" имеет значение - "Ничего".

На эти адреса ссылаются заказы, поэтому их удаления в настоящее время - нет.
Напишите пожелание в наш сервис пожеланий.

Там выполняется eval() того, что написано в колонке Формула,
т.е. по сути вы можете использовать все математические функции PHP (использовать любые выражения PHP).

Из доступных переменных - 
$S - Сумма заказа
$W - Общий вес заказа

Например: round($S*0.3) - это означает 30% от стоимости заказа, сумма окрулена.

Да, это хорошее предложение, в новых версиях добавим флажок "публичности" для оплат и доставок.

Только с помощью удаления, или в крайнем случае прописать в шаблоне shop/checkout/delivery.tpl условие исключения.

Очень объемный вопрос, но постараюсь вкратце объяснить.

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

Информация по комплектации сначала выводятся в атрибутах элемента формы:

<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} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getCost('Зачеркнутая цена', $key)}"}' data-sticks='{$offer->getStickJson()}'>{$offer.title}</option>
    {/foreach}
</select>

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

{foreach $product.offers.items as $offer_sortn=>$offer}
    {* $offer - здесь объект \Catalog\Model\Orm\Offer *}
    {$offer.num} 
    {$offer.id}
{/foreach}

Да, если в аргументе 2,3 метода bind - не задан callback на другой обработчик.

Исправили данную ошибку, будет опубликовано в ближайшем обновлении.