Jump to content
dinox

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

Recommended Posts

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

 

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

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

 

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

  • +1 4

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
10 минут назад, Prooksius сказал:

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
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

 

 

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
8 минут назад, dinox сказал:

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

image.png.3990741e72fb9453d49c256c8b2e3bf7.pngimage.thumb.png.93a66f10fa5317a20d4b460f1683884b.png

 

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

Share this post


Link to post
Share on other sites
24 минуты назад, iglin сказал:

image.png.3990741e72fb9453d49c256c8b2e3bf7.pngimage.thumb.png.93a66f10fa5317a20d4b460f1683884b.png

 

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

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

Share this post


Link to post
Share on other sites
1 минуту назад, dinox сказал:

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

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

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

Share this post


Link to post
Share on other sites
8 минут назад, iglin сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Posted (edited)
8 часов назад, Yoda сказал:

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

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

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

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

 

Edited by Prooksius

Share this post


Link to post
Share on other sites
1 час назад, Prooksius сказал:

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

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

  • +1 1

Share this post


Link to post
Share on other sites
1 минуту назад, iglin сказал:

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

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

Share this post


Link to post
Share on other sites
31 минуту назад, Prooksius сказал:

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

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

Share this post


Link to post
Share on other sites

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

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

image.png.18dd2aa6c55e0e348f485c15492b2620.png

  • +1 1

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

а где ветка с issues?

Share this post


Link to post
Share on other sites

давайте завязывайте с предложениями типа "а давайте опенкарт перепишем на laravel, я слышал это хороший фреймворк"

 

  • +1 1

Share this post


Link to post
Share on other sites

В 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 3

Share this post


Link to post
Share on other sites
<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>

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

  • +1 4

Share this post


Link to post
Share on other sites

Вот этот момент актуален и для ocStore3

 

Share this post


Link to post
Share on other sites

В состав ocStore 3.0.3.7 войдет это виджет 

 

  • +1 4

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.