Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


dinox

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

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 featured та pinned this topic

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

Надіслати
Поділитися на інших сайтах

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.pngimage.thumb.png.93a66f10fa5317a20d4b460f1683884b.png

 

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

Надіслати
Поділитися на інших сайтах

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

image.png.3990741e72fb9453d49c256c8b2e3bf7.pngimage.thumb.png.93a66f10fa5317a20d4b460f1683884b.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 :)

Надіслати
Поділитися на інших сайтах


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

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

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

А если серьезно по теме ограничений в корзине.
Есть 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>

 

Надіслати
Поділитися на інших сайтах

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

  • +1 4
Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах


  • dinox locked, unpinned та unfeatured this topic
Гість
Ця тема закрита для публікації повідомлень.
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.