Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Старт разработки ocStore 3.0.3.7


dinox
 Поделиться

Рекомендованные сообщения

Благодаря тому что от Вас пришла отличная обратная связь, получилось быстро  выпустить релиз ocStore 2.3.0.2.4 (после долгой паузы в разработке), давайте в таком же темпе сделаем релиз ocStore 3.0.3.7
Уже смержено изменения с оригинального опенкарт и начата адаптация, после этого релиз будет дополнен полезным функционалом который появился, в ocStore 2.3.0.2.4. 
Приглашаю все принять участие! Кто идеями, кто репортами о ошибках, кто пул реквестами. Ждем всех :)

 

@buslikdrev @spectre @ocdev_pro @snastik @****** @markimax @chukcha @RGB @Tom @mpn2005  у Вас уже были решения и предложения по релизу, если Вам есть еще что добавить, актуализируйте пожалуйста Ваши решения

p.s. в гите основная ветка изменена на ветку ocStore 3.0.3.7

 

Список изменений:
1. Добавлен редактор модификаторов с возможностью бекапа (мигрирован с ocStore 2.3.0.2.4) - 10.03.2021

2. Изменен стандартный источник курса валют (Добавлен Центробанк ЕС, Центробанк РФ, Нацбанк ******ы, Fixer) - 12.06.2021

3. Добавлена возможность смены сортировки модулей в макетах перетаскиванием - 12.06.2021

4. Добавлена возможность сортировки товаров и статей перетаскиванием в модулях рекомендуемых - 12.06.2021

5. Добавлен Домовой - Виджет для мониторинга состояния магазина 1.0.1  - 12.06.2021

6. Вынесено в настройки лимит количества отображаемых элементов при поиске с автодополнением в админке  - 12.06.2021

7. Добавлено способ вывода тегов canonical, prev, next - 13.06.2021

8. Добавлено гибкое управление выводом тега noindex - 13.06.2021

9. Применение фильтров в админке по нажатию на Enter на страницах заказов, вовратов, покупателей, периодических заказах, статьях блога  - 13.06.2021 

10. Поправлен SeoPro, в котором исправлена генерация полного пути для товаров при включенной опции учитывать категорию - 27.06.2021

 

  • +1 6
Ссылка на комментарий
Поделиться на других сайтах


  • dinox сделал важной и закрепил теме

Есть такая идея - сделать единый механизм ограничений по корзине.
Вот например в Симпле реализовано - максимальная сумма корзины, минимальная,  и в зав. от группы покупателей и вроде как все. А очень много люди спрашивают, как ограничить по такому критерию, вот по такому + такому... И приходится лепить на коленке что-то эдакое, кастомное до безобразия.
Может быть, есть смысл сделать некий раздел в дополнениях - по аналогии с "Учитывать в заказе" - назвать, например "Ограничения в заказе".
Там будут разные ограничители - по макс сумме, по мин сумме, еще какие-то - неважно какие, их можно написать хоть сколько, любые. Их можно будет включить, отключить. И они будут, ну к примеру, выбрасывать ошибку, если сработали. И не давать оформлять заказ.
Может быть уже есть что-то подобное, тогда сорри.. Но хотелось бы иметь централизованый механизм ограничений, который бы полноценно встраивался в систему.

Ссылка на комментарий
Поделиться на других сайтах

10 минут назад, Prooksius сказал:

Есть такая идея - сделать единый механизм ограничений по корзине.
Вот например в Симпле реализовано - максимальная сумма корзины, минимальная,  и в зав. от группы покупателей и вроде как все. А очень много люди спрашивают, как ограничить по такому критерию, вот по такому + такому... И приходится лепить на коленке что-то эдакое, кастомное до безобразия.
Может быть, есть смысл сделать некий раздел в дополнениях - по аналогии с "Учитывать в заказе" - назвать, например "Ограничения в заказе".
Там будут разные ограничители - по макс сумме, по мин сумме, еще какие-то - неважно какие, их можно написать хоть сколько, любые. Их можно будет включить, отключить. И они будут, ну к примеру, выбрасывать ошибку, если сработали. И не давать оформлять заказ.
Может быть уже есть что-то подобное, тогда сорри.. Но хотелось бы иметь централизованый механизм ограничений, который бы полноценно встраивался в систему.

А  еще не хватает вот прямо очень встроенного набора иконок поздравлений с восьмым марта, чтобы мигали!

Скачать поздравления с 8 Марта для Whatsapp - картинки, gif открытки, видео

Чтобы глаза прям вот взяли и вытекли.
И чтобы пхп на русском.

взятьмассив как массив (вывести ворыч массив) {

массив->изгоняем_идиотов_из_оксторе()->run
}

Ссылка на комментарий
Поделиться на других сайтах


1 час назад, dinox сказал:

Приглашаю все принять участие!

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

 

В admin/controller/extension/modification.php в "$data['xml'] =" добавить htmlentities()

В admin/model/extension/modification.php в функции addModificationBackup добавить html_entity_decode как в editModification

Ну и в upload/install/opencart.sql в `backup_id` int(11) NOT NULL, добавить AUTO_INCREMENT

 

 

Ссылка на комментарий
Поделиться на других сайтах

13 минут назад, iglin сказал:

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

 

В admin/controller/extension/modification.php в "$data['xml'] =" добавить htmlentities()

В admin/model/extension/modification.php в функции addModificationBackup добавить html_entity_decode как в editModification

Ну и в upload/install/opencart.sql в `backup_id` int(11) NOT NULL, добавить AUTO_INCREMENT

 

 

с AUTO_INCREMENT, согласен, по поводу добавить html_entity_decode не надобности в этом, там происходит простое копирование из поля в поле, без обработки. В базу не попадает никогда htmlentities версия  xml, при редактировании это все всегда преобразуется. При добавлении ocmod это происходит другими частями кода. По поводу htmlentities он там не нужен. Если у Вас есть конкретные примеры где это создает проблемы в редакторе, можно скрины? И как в базу попали данные после htmlentities?

Ссылка на комментарий
Поделиться на других сайтах


8 минут назад, dinox сказал:

По поводу htmlentities он там не нужен.

image.png.3990741e72fb9453d49c256c8b2e3bf7.png

 

Соответственно перед редактированием стоит символы преобразовать в HTML-сущности, а при сохранении обратно. 

Ссылка на комментарий
Поделиться на других сайтах

24 минуты назад, iglin сказал:

image.png.3990741e72fb9453d49c256c8b2e3bf7.png

 

Соответственно перед редактированием стоит символы преобразовать в HTML-сущности, а при сохранении обратно. 

Вот теперь аргументированый  репорт о баге :) Спасибо! Внесу правки

Ссылка на комментарий
Поделиться на других сайтах


1 минуту назад, dinox сказал:

Вот теперь аргументированый  репорт о баге :) Спасибо!

Да я что то сначала подумал что это очевидно - если выводить теги xml в текстовое поле, то браузер обработает их как теги, а не содержимое поля)

Вот и не стал подробно расписывать)

Ссылка на комментарий
Поделиться на других сайтах

8 минут назад, iglin сказал:

Да я что то сначала подумал что это очевидно - если выводить теги xml в текстовое поле, то браузер обработает их как теги, а не содержимое поля)

Вот и не стал подробно расписывать)

Тесты проводились на различных xml файлах кроме того они проходят через codemirror  у которого включен режим xml, можете в личку отправить Ваш ocmod файл для тестов ) Не могу воссоздать такое поведение редактора, мне это нужно чтобы точно удостоверится что начало нормально работать

Ссылка на комментарий
Поделиться на других сайтах


Редактор подремонтирован, Спасибо @iglin за его чудо ocmod дополнение которое помогло отладить работу редактора, также я пофиксил мелкие другие неточности и все отправил в гит второй версии, на странице скачивания уже доступен патч с правками, для тех кто уже поставил или обновил с дифф архива сайт, используйте ocStore_2.3.0.2.3_fix_patch(10.03.2021).zip он содержит актуальные правки, еще перед этим удалите таблицу oc_modification_backup при заходе в редактирование любого ocmod модификатора эта таблица пересоздатся с правыльными параметрами. Теперь его можно будет адаптировать и на ocStore 3.0.3.7 :)

Ссылка на комментарий
Поделиться на других сайтах


Даже примерных сроков выхода 3.0.3.7 нету? И на Гите ссылка на список отличий с оригинальным движком не работает.

Ссылка на комментарий
Поделиться на других сайтах


8 часов назад, ****** сказал:

Чтобы глаза прям вот взяли и вытекли.

О, наш злобный койот, как всегда, отгавкался )

А если серьезно по теме ограничений в корзине.
Есть FilterIt - классный модуль, там по-моему можно это сделать, но тоже ненапрямую, а через доставки, настолько неочевидно.
Больше толком я ничего не нашел.
Если есть уже решение - ткните носом, плиз, чет не нахожу.

Вот обсуждение одно, как пример.

 

Изменено пользователем Prooksius
Ссылка на комментарий
Поделиться на других сайтах

1 час назад, Prooksius сказал:

Вот обсуждение одно, как пример.

Всей подобной логикой должны заниматься модули оплаты/доставки мое мнение. Коим фильтерит и является. Сама корзина ничего ограничивать и считать не должна. 

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

1 минуту назад, iglin сказал:

Всей подобной логикой должны заниматься модули оплаты/доставки мое мнение. Коим фильтерит и является. Сама корзина ничего ограничивать и считать не должна. 

Согласен. Именно так и предполагаю, но не доставками (при чем тут доставки, если речь идет о сумме в корзине - subTotal), а каким-то другим слоем модулей, по типу доставок и оплат.

Ссылка на комментарий
Поделиться на других сайтах

31 минуту назад, Prooksius сказал:

при чем тут доставки, если речь идет о сумме в корзине - subTotal

Да при том что условия для показа того или иного модуля доставки/оплаты внутри этого модуля! Не корзина решает что вам "показать", а сами модули решают показываться или нет. С предложениями по новому слою вам к команде разработчиков оригинального опенкарта, чтобы добавили в 4 версию))

Ссылка на комментарий
Поделиться на других сайтах

На всякий случай продублирую сюда, по части seo неплохо было бы чуть доработать seo pro

и еще по возможности добавить поддержку svg изображений в менеджере и при выводе на сайте + поле SVG Favicon в настройках как сейчас предлагает загружать яндекс вебмастер

image.png.18dd2aa6c55e0e348f485c15492b2620.png

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


 Я вот о таких ограничениях, вот из того обсуждения цитата:

11 часов назад, yurame1nik сказал:

Подскажите пожалуйста, можно реализовать ограничение по минимальной сумме при оформлении заказа в зависимости от региона.

мне кажется, это доставок или оплат не должно касаться.

Ок, я понял, спасибо за подсказки.

Ссылка на комментарий
Поделиться на других сайтах

В ocstore, как и в оригинальном ОС, ссть недоработка, из-за которой после смены класса кэша с файлов на, например, redis, становится невозможным очистить кэш стандартными средствами движка.

 

как вариант, можно использовать следующее решение

 

добавить новый метод по очистке кэша непосредственно в класс редиса

upload/system/library/cache/redis.php

Spoiler

<?php
namespace Cache;
class Redis {
    private $expire;
    private $cache;

    public function __construct($expire) {
        $this->expire = $expire;

        $this->cache = new \Redis();
        $this->cache->pconnect(CACHE_HOSTNAME, CACHE_PORT);
    }

    public function get($key) {
        $data = $this->cache->get(CACHE_PREFIX . $key);
        return json_decode($data, true);
    }

    public function set($key,$value) {
        $status = $this->cache->set(CACHE_PREFIX . $key, json_encode($value));
        if($status){
            $this->cache->setTimeout(CACHE_PREFIX . $key, $this->expire);
        }
        return $status;
    }

    public function delete($key) {
        $this->cache->delete(CACHE_PREFIX . $key);
    }

    public function flush() {
        $this->cache->del($this->cache->keys(CACHE_PREFIX . '*'));
    }

}

 

добавить новый метод по очистке кэша в класс кэша

upload/system/library/cache.php

Spoiler

<?php
/**
 * @package        OpenCart
 * @author        Daniel Kerr
 * @copyright    Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/)
 * @license       https://opensource.org/licenses/GPL-3.0
 * @link       https://www.opencart.com
*/

/**
* Cache class
*/
class Cache {
    private $adaptor;
    
    /**
     * Constructor
     *
     * @param    string    $adaptor    The type of storage for the cache.
     * @param    int        $expire        Optional parameters
     *
     */
    public function __construct($adaptor, $expire = 3600) {
        $class = 'Cache\\' . $adaptor;

        if (class_exists($class)) {
            $this->adaptor = new $class($expire);
        } else {
            throw new \Exception('Error: Could not load cache adaptor ' . $adaptor . ' cache!');
        }
    }
    
    /**
     * Gets a cache by key name.
     *
     * @param    string $key    The cache key name
     *
     * @return    string
     */
    public function get($key) {
        return $this->adaptor->get($key);
    }
    
    /**
     *
     *
     * @param    string    $key    The cache key
     * @param    string    $value    The cache value
     *
     * @return    string
     */
    public function set($key, $value) {
        return $this->adaptor->set($key, $value);
    }
   
    /**
     *
     *
     * @param    string    $key    The cache key
     */
    public function delete($key) {
        return $this->adaptor->delete($key);
    }

    public function flush() {
        return $this->adaptor->flush();
    }

}

 

 

добавить новые инструкции по очистке кэша через кнопку в админке

upload/admin/controller/common/developer.php

Spoiler

public function allcache() {
        $this->load->language('common/developer');

        $json = array();

        if (!$this->user->hasPermission('modify', 'common/developer')) {
            $json['error'] = $this->language->get('error_permission');
        } else {

            if ($this->config->get('cache_engine') === 'redis') {
                $this->cache->flush();

                $json['success'] = sprintf($this->language->get('text_cache'), $this->language->get('text_allcache'));
            } elseif ($this->config->get('cache_engine') === 'files') {


        $files = glob(DIR_CACHE . 'cache.*');

        if (!empty($files)) {
            foreach($files as $file){
                $this->deldir($file);
            }
        }

        $imgfiles = glob(DIR_IMAGE . 'cache/*');

        if (!empty($imgfiles)) {
            foreach($imgfiles as $imgfile){
                $this->deldir($imgfile);
            }
        }

        // Before we delete we need to make sure there is a sass file to regenerate the css
        $file = DIR_APPLICATION  . 'view/stylesheet/bootstrap.css';

        if (is_file($file) && is_file(DIR_APPLICATION . 'view/stylesheet/sass/_bootstrap.scss')) {
            unlink($file);
        }

        $files = glob(DIR_CATALOG  . 'view/theme/*/stylesheet/sass/_bootstrap.scss');

        foreach ($files as $file) {
            $file = substr($file, 0, -21) . '/bootstrap.css';

            if (is_file($file)) {
                unlink($file);
            }
        }

        $directories = glob(DIR_CACHE . '*', GLOB_ONLYDIR);

            if ($directories) {
                foreach ($directories as $directory) {
                    $files = glob($directory . '/*');

                    foreach ($files as $file) {
                        if (is_file($file)) {
                            unlink($file);
                        }
                    }

                    if (is_dir($directory)) {
                        rmdir($directory);
                    }
                }
            }


            $json['success'] = sprintf($this->language->get('text_cache'), $this->language->get('text_allcache'));
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

}

Spoiler

    public function systemcache() {
        $this->load->language('common/developer');

        $json = array();

        if (!$this->user->hasPermission('modify', 'common/developer')) {
            $json['error'] = $this->language->get('error_permission');
        } else {
        
            if ($this->config->get('cache_engine') === 'redis') {
                $this->cache->flush();
                $json['success'] = sprintf($this->language->get('text_cache'), $this->language->get('text_allcache'));
            } elseif ($this->config->get('cache_engine') === 'files') {        

            
        $files = glob(DIR_CACHE . 'cache.*');

        if (!empty($files)) {
            foreach($files as $file){
                $this->deldir($file);
            }
        }

            $json['success'] = sprintf($this->language->get('text_cache'), $this->language->get('text_systemcache'));
        }
        }
        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }

 

 

 К слову, так же неплохо было бы добавить где-то инструкцию, что после изменения $_['cache_engine'] = '?'; в upload/system/config/default.php стоит так же где-то (в config.php?) прописать константы со своими значениями

Spoiler

define('CACHE_HOSTNAME', 'localhost');
define('CACHE_PORT', '6379');
define('CACHE_PREFIX', 'oc_');

 

  • +1 4
Ссылка на комментарий
Поделиться на других сайтах

<file path="admin/controller/marketplace/modification.php">

	<operation>
		<search><![CDATA[
			$data['log'] = htmlentities(file_get_contents($file, FILE_USE_INCLUDE_PATH, null));
		]]></search>
		<add position="replace" trim="true"><![CDATA[
			if (filesize($file) > 100000) {
				$data['log'] = 'Very BIG file';
			} else {
				$data['log'] = htmlentities(file_get_contents($file, FILE_USE_INCLUDE_PATH, null));
			}
		]]></add>
	</operation>
	
</file>

<!-- Релоад шаблонов после обновления модификаторов  -->	
<file path="system/library/template/twig.php">
	<operation>
		<search><![CDATA[$this->twig = new \Twig_Environment($loader, $config);]]></search>
		<add position="before"><![CDATA[
		$config['auto_reload'] = true;
		//$config['strict_variables'] = true;
		$config['debug'] = true;
		]]></add>
	</operation>
	
</file>

 

Ссылка на комментарий
Поделиться на других сайтах

В гит уже добавлен редактор модификаторов с возможностью бекапа (мигрирован с ocStore 2.3.0.2.4) 

Ссылка на комментарий
Поделиться на других сайтах


Добавил фикс редактора шаблонов в гит,  ошибка заключалась в том что как только производилось первое редактирование частей шаблона через админ панель, этот файл twig начинал игнорировать действия модификаторов ocmod. Модификаторы просто не брали код шаблонов с базы после редактирования, а по обычному брали его с файлов twig шаблона. 

  • +1 4
Ссылка на комментарий
Поделиться на других сайтах


Не стоит ли изменить meta_description с varchat(255) до text? Иногда люди пишут больше 255 символов и в админке они прописываются, но при сохранении текст обрезается.

Ссылка на комментарий
Поделиться на других сайтах


  • dinox закрыл, открепил и сделал обычной теме
Гость
Эта тема закрыта для дальнейших сообщений.
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.