• На рассмотрении

    +6

    Выбор логики работы корзины

    Ярослав Пономарев Обновлен 9 лет назад в категории CMS Общий функционал 0

    Для некоторых магазинов необходимо, чтобы корзина пользователя была доступна на всех устройствах.
    Неплохо было бы выбирать в настройках логику работы.
    1. При неавторизованном пользователе товары привязываются к сессии.
    2. При авторизации выборка идет по пользователю. Корзины неавторизованного пользователя и авторизованного сливаются.

    Как показало тестирование 7 крупных розничных магазинов, именно такая логика используется у них.
    Задача в том, чтобы продаваемый товар не пропадал из корзины, а "преследовал" покупателя до покупки.
    Не зря же используются оповещения о брошенных корзинах. И в данном функционале возможно точно знать, какая у пользователя корзина - брошенная.
  • На рассмотрении

    +2

    Вывод остатка на складе в просмотре / редактировании заказа

    Павел С Обновлен 9 лет назад в категории CMS Админ. панель 0

    Предлагаю добавить вывод у товаров остатка на складе в просмотре/редактировании заказа. Тем самым мы заранее будем знать доступный остаток, и если клиент захочет добавить товаров в заказ, нам не придется искать остатки в других местах админ панели или в 1с.
    Из скриншота ниже: (1) в резерве - означает что 1 заказанный товар уже вычтен от общего количества на складе и спишется или вернется обратно на склад в зависимости от того, как завершится сделка.
  • На рассмотрении

    +2

    Многомерные комплектации. Добавление CSS класса к характеристикам с 0 остатком.

    Денис Ефремов Обновлен 9 лет назад в категории CMS Общий функционал 0

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

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

    В общем, вот 2 метода, которые нужно добавить в jquery.changeoffer.js, а затем вызвать первый метод в конце changeMultiOffer таким образом - checkEmptyOffers(selected):


    /**
    * Вычисляем характеристики, для которых нет в наличии товаров
    * @param {obj} selected Массив выбранных характеристик checkEmptyOffers
    */
    checkEmptyOffers = function(selected) {
    // Из массива выбранного делаем объекты данных для каждой хар-ки отдельно
    selected.forEach(function(el, i) {
    // Исключаем выбранное значение из возможных
    var t = selected.filter(function(v, idx) {
    return idx != i;
    });
    disableOptions({ // готовим объект и передаем его метод для изменения DOM
    name: el.title, // имя хар-ки по которой проходим
    activeValue: el.value, // выбранное значение хар-ки
    disabled: [], // сюда отфильтруются только нулевые остатки из всех siblings (ниже)
    // фильтруем компл, оставим только актуальные для выбранных значений
    siblings: data.options.multiOffersInfo.filter(function(v) {
    // здесь ишем чтобы не совпадало с выбранной по которой проходим но совпадало с
    return v.info.every(function(a) { // выбранными остальными
    return (a[0] == el.title && a[1] != el.value) || t.some(function(o) {
    return JSON.stringify(o) === JSON.stringify({ // объекты только так сравнивать)))
    title: a[0],
    value: a[1]
    });
    });
    });
    })
    });
    });
    },
    // @TODO перенести формирование disabled в метод checkEmptyOffers, тк disableOptions должен только DOM заниматься
    // @TODO избавиться от промежуточного siblings.


    /**
    * Зачеркиваем характеристики
    * @param {obj} data Массив данных
    */
    disableOptions = function(d) {
    var $listEl = $('[data-prop-title="' + d.name + '"]'),
    $items,
    getValueByName = function(name, info) { // хелпер. @TODO вынести объявление рядом с in_array()
    return info.filter(function(ar) {
    return ar[0] == name;
    })[0][1];
    };
    d.disabled = d.siblings.filter(function(s) { // сюда фильтруем только остатки 0
    s.title = d.name;
    s.value = getValueByName(s.title, s.info);
    return s.num < 1;
    }); // @TODO этот фильтр в checkEmptyOffers вместо siblings

    // Далее нужно получить набор $items $(jQuery(obj))
    $items = getItems

    // И само зачеркивание
    $items.removeClass('empty');
    d.disabled.forEach(function(val) {
    $items.each(function(i, el) {
    var _this = $(this);
    if (_this.text().trim() == val.value) {
    _this.addClass('empty');
    }
    });
    });
    },


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

    +4

    Версия сайта для мобильных устройств

    Andrey Vas Обновлен 9 лет назад в категории CMS Общий функционал 9

    Здравствуйте!
    Сейчас почти все разработчики движков для сайтов параллельно делают версию для мобильных устройств, + поисковики ранжируют такой сайт выше!
    Планируется ли у вас версия для мобильных устройств?
  • На рассмотрении

    +6

    Шаблон почтовых уведомлений

    Виталий Савченко Обновлен 9 лет назад в категории CMS Общий функционал 1

    Хотелось бы увидеть более удобный функционал "Купить в 1 клик", чтоб письмо приходило не от robot@магазин.ру, а с подставленным адресом клиента, на которое сразу же можно ответить клиенту, а также заменить тему письма "Купить в один клик на сайте www.сайт.ru" на название товара. Иначе заказы скапливаются и сливаются в одну цепочку в почте от одного адресата с одной и той же темой.
  • На рассмотрении

    +1

    Ручная сортировка контента

    Дмитрий Петухов Обновлен 9 лет назад в категории CMS Общий функционал 3

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

    +3

    Доработка XML Sitemap

    Павел Глазков Обновлен 9 лет назад в категории CMS Админ. панель 1

    Просьба сделать отдельный XML Sitemap для Google, чтобы присутсвовали тэги с картинками от товара, статьи и тд.
  • На рассмотрении

    +6

    Добавить шаблоны текстов для вставки в поле "текст для покупателя"

    Сергей Токарев Обновлен 9 лет назад в категории CMS Админ. панель 2

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

    Было бы здорово прямо над полем "текст для покупателя" сделать выпадающее меню с шаблонами.

  • На рассмотрении

    +2

    Порядок отображения характеристик.

    Денис Ефремов Обновлен 9 лет назад в категории CMS Админ. панель 0

    Порядок отображения характеристик на карточке товара (на фронте) зависит от порядка расположения опций на вкладке "комплектации" (в админке).


    Чтобы изменить этот порядок, необходимо:
    • стереть название
    • написать новое
    • изменить списковую характеристику
    • проделать те же 3 пункта для второй характеристики


    Я предлагаю для этого блока в админке добавить плагин из арсенала jqueryui, который позволяет с помощью drag&drop менять порядок расположения элементов в списках.
  • На рассмотрении

    0

    Модуль миграции Opencart

    Павел Глазков Обновлен 9 лет назад в категории CMS Админ. панель 0

    Доработать модуль миграции Opencart, так чтобы он автоматически для модуля "301 редирект" создавал перенаправления из старых ссылок на новые.