##IMPORTANT INFO Для работы удаленной загрузки изображений требуется php-curl. Для работы системы на сервере Nginx необходимо прописать следующую инструкцию в конфиг.
location / {
try_files $uri /index.php$is_args$args;
}
- Поменял библиотеки сжатия css/js в api/Bender
- Добавил авторизацию nginx для всего, что выше ./simpla Авторизация устроена через подзапрос subrequest, nginx при попытке доступа в защищенную часть делает http запрос скрипту ./auth/index.php, который в случае, если авторизация пройдена возвращает 200 или 403, если нет.
- мелкие доделки в шаблоне
- адаптация для php8
- Баг PagesAdmin.php . Получал страницы из кеша, а не из БД.
- Очищен некоторый мусор.
- Актуализирован install.php
- Обновлен rapida.sql
- Кеш и очередь заданий полностью переключены на redis
- Генерация страниц пагинации убрана из cron/sitemap.php
- Добавлена функция сохранения вирт. родительской категории у раздела. Пока не вывел в шаблон.
-
Добавлен генератор сайтмап файлов cron/sitemap.php
-
Добавлен flag nofollow для возомжности закрытия ссылок для фильтра. productsView.php
- Баг при обработке несуществующих категорий.
- Добавлена опция "Обрезать по длинному краю" для изображений.
- Включение Imagick выведено в админку.
- Оптимизирован механизм сохранения настроек. Теперь настройки хранятся в php файле, что ускоряет его парсинг при работе скрипта.
- Оптимизация индексов в таблице свойств s_options, теперь создается покрывающий индекс для всех столбцов, для которых индекс вообще создается. Теоретически это должно позволить самые типичные и самые тяжелые запросы в эту таблицу выполнять только из индекса, что должно улучшить производительность.
- Ошибка в шаблоне order_email_admin.tpl Не работала ссылка на товар.
- Поменял везде в шаблонах область видимости переменных со scope=parent на scope=root, потому что не везде шаблоны грузятся один из другого.
- Баг cache->set_cache_no_sql() при записи null получалась ошибка записи.
- Добавлена возможность просмотра отладочной информации при импорте. site.com/simpla/ajax/import.php?debug=1
- Добавлен новый более быстрый способ сохранения кеш файлов на диск msgpack_pack/msgpack_unpack
- Рефакторинг класса Cache
- Небольшие изменения image.php в части дефолтных значений для размера водяного знака и способа получения абсолютного пути к файлу
- Изменен способ подсчета строк в таблицах очереди заданий s_queue s_queue_full.
queue->count_tasks_full() queue->count_tasks() Теперь вместое
select count(*) from table
используетсяshow table status like 'table'
- Функции преобразования изображений GD и IMAGICK переписаны, теперь GD тоже понимает прозрачность.
- Старая функция водяной знак обновлена, теперь изображение водяного знака уменьшается пропорционально ресайзу итогового изображения. В настройках появился параметр размер водяного знака, который устанавливает ширину водяного знака в % от ширины итогового изображения.
- Добавлена фильтрация двойных пробелов и переносов строк в функцию $db->placehold(). Сделано чтобы попадающие в лог mysql запросы были более читаемыми.
- Тег canonical создается для всех страниц с кол-вом выбранных значений больше 1 в опции view/ProductsView.php
- Ошибки view/ProductsView.php при выборе в адресе страницы категории с несуществующим брендом выпадала ошибка, теперь 404.
- Ошибка в view/ProductsView.php, не работал поиск.
- Ошибка simpla/design/html/category.tpl
- Добавлено удаление незадействованных в шаблонах мета тегов переменных. Например, в товаре нет стиля, тогда переменная {$stil'} из шаблона будет удалена после безуспешной попытки ее преобразования.
- Добавлено поле enabled для категорий. Теперь категория может быть невидимой в меню, например, но доступной по ссылкам.
- Ошибки в simpla/design/html/category.tpl
- Добавлен плугин-модификатор смарти для работы с библиотекой morpher.so. Если библиотека не установлена, модификатор возвращает переденное значение неизмененным.
- Редактор тексте на странице админки page.tpl изменен на более простой Codemirror.
- Добавлен кеш к функции pages->get_pages()
- Файлы кеша теперь сохраняются без расширения txt
- Ошибка в api/Features.php приводила к ошибке notice.
- Изменения в view/ProductView.php. Теперь в массиве $product['images], удаляется основное изображение, которое уже есть в $product['image']
- Место хранение кеша config.ini изменено c ./img/cache на ./cache
- Поле с кол-вом просмотров товара добавлено в карточку товара в админке.
- В view/ProductView.php добавлен вызов products->add_view().
- Добавлены методы products->add_view(), products->add_vote(). Счетчик просмотров карточки товара и выставление оценки товару.
- Мелкие исправления ошибок, выявленных в ходе подключения микроразметки schema.org product к карточке товара
- Ошибки в simpla/ajax/import_single.php, который предназначен для импорта отдельных параметров.
##b12
- Ошибка в функции image->is_url()
- Изменены типы отдельных полей в БД.
- Добавлено название категории в ед. числе для возможности динамических названий товаров.
- Добавлена возможность генерации описаний товаров и мета тегов по шаблону. Сами шаблоны задаются в категориях.
- Каждому товару присваивается главная категория, из этой категории генерируется автоматические мета теги и описание (при наличии)
- Для товара добавлено короткое имя, которое может использоваться для формирования динамических имен товаров "категория в ед. числе" + "короткое имя товара"
- Устранены отдельные проблемы парсинга ЧПУ ссылок из productsView.php.
- Инсталер теперь создает БД, если ее не существует.
- Внесены измненеия в js/main.js, направленные на возможность использования jax фильтра брендов.
- Не вспомню все что изменял. Основные баги были вызваны работой функции translit_ya(), с помощью которой кодируются названия для их использования в адресной строке. Проблема была вызвана тем, что транслит удалял слишком много символов (к примеру точки), что приводило к возникновению разных свойств с одинаковыми значениями транслитом. Вся логика транслита и ЧПУ полностью переделана. Теперь транслит работает скромнее, а за счет оптимизации удалось сделать ЧПУ более читаемыми. Пример: http://localhost/catalog/svetil'niki/brand-ideal_lux/stil'-modern-khaj~tek
- Изменен механизм формирования ЧПУ. Теперь используется только 1 разделитель '-' (минус).
- Теперь очень большине (> 512 символов) значения свойств пишутся в отдельную таблицу, что позволяет писать даже очень длинные свойства. Платой за это стало невозможность использования этих длинных свойств в фильтрах.
- Ошибка в методе $this->root->gen_uri_from_filter(), не срабатывала в части преобразования брендов
- Ошибка в методе $this->root->gen_uri(), которая используется в качестве плугина смарти chpu_url
- Баг в simpla/design/html/product.tpl. Не получалось сохранять товар.
- Ошибка при работе с ключевыми словами из поискового запроса в методах класса products
- Ошибка в get_order()
- В дополнение к выбранным свойствам товаров в перменную $meta_filter выведены названия выбранных брендов. Данная переменная доступна из шаблонов смарти.
- Теперь дебагер включается только если залогинен админ, иначе дебагер не только не отображается, но и не записывает события.
- Рефакторинг разного.
- Рефакторинг simpla/ajax/import.php
- Добавлена возможность импорта отдельных параметров. Требования:
- Минимальное количество столбцов = 2.
- Должен быть столбец product_id. Умеет добавлять/изменять: категории товара, бренд, свойства.
- Специальная переменная с перечислением выбранных фильтров $meta_filter. Переменная доступна в шаблоне страниц категорий.
- При автообновлении остатков меняется состояние товаров visible = 1/0
- Теперь отладчик работает только, если авторизован админ.
- В конфиг добавлен user-agent, который использует сервер при скачивании с внешних источников
- Мелкие исправления ImportYmlAdmin.php.
- Увеличена длина поля sku в таблице s_variants. Небольшие изменения simpla/ajax/import.php для вывода ошибок, в случае невозможности выполнения любых операций, связанных с импортом.
- Ошибка в классе features приводила к невозможности добаления свойства, содержаних неразрывный пробел "\xc2\xa0"
- Изменен метод translit_ya() в связи с тем, символы ,./\ иногда являются единственным, что делает значение свойств товаров уникальными. Теперь эти символы конвертируются в кодировку punycode
- Не работало ajax изменение свойств, к примеру вкл./откл. видимости категорий или свойств. Устранено simpla/ajax/upda_object.php
- Ошибка при генерации ЧПУ ссылок.
- Ошибка в productsView.php при выполнении ajax запроса скрипт останавливался слишком рано.
- Баги в методе uri_to_api_filter() в файле productsView.php.
- Ошибка в контроллере brandAdmin.php
- Ошибка в контроллере commentAdmin.php
- Ошибка в контроллере orderAdmin.php
- Ошибка в контроллере pageView.php, в некоторых случаях препятствовала выводу http заголовка 404
- Ошибка в методе update_variant(), связанная с бесконечным товаром. Теперь если кол-во не задано - в базу пишет значение NULL. Правки в шаблоне админки order.tpl. Изменения метода orders->close() и orders->open()
- Ошибки в методах работы со статьями get_post() get_posts() запрос в БД не выгружал изображений
- Ошибки в postAdmin.php
- Добавлено поле для ввода счетчика яндекс метрики в раздел настроек в админке.
- Добавлено поле "адрес" в настройки для отображения к примеру в подвале сайта
- Добавлена возможность автоматической генерации мета тегов при открытии категорий товаров. Идея из OKAYCMS.
- Изменен способ удаления лишних аргументов кешируемых функций. Раньше удалялись определенные параметры. Сейчас удаляются все, кроме определенных в массиве класс $tokeep. Позволяет избежать дублирования кеша с одинаковыми данными.
- В связи с использованием новых возможностей php7 отвалилась поддержка более ранних версий. Восстановлено.
- Мелкие недостатки синтаксиса, препятствующие запуску на php5.6.
- Ошибка в методе get_uri(), который получал адресную строку из массива $_SERVER
- Изменено название метода cart->emty_cart()
- Отремонтирован класс feedback для обратной связи
- Создание купона в админке теперь работает
- Не работало изменение параметров товаров со страницы списка товаров админки.
- В админке исправлено отображение миниатюр у товаров без изображения.
- Ошибки в методе gen_uri(), который используется для генерации ЧПУ ссылок.
- Ошибка в контроллере записей в блог в админке postAdmin.php
- Ошибка в механизме добавления категорий товару в админке.
- Адреса изображения в почтовых уведомлениях о заказах изменены с относительных на абсолютные.
- Ошибки с отображением кодов валют в заказе.
- В таблицу s_products добавлено поле stock, которое обновляется при обновлении вариантов. Теперь товары не на складе выводятся в последнюю очередь. Методы update_variant(), add_variant(), get_products(), count_products() соответствующим образом доработаны.
- Логика подсчета страниц пагинации перенесена из шаблона в контроллер productsView.php, что упрощает код в шаблоне.
- Исправлена ошибка в контроллере root - не работали xhr запросы.
- Исправлены ключи в таблице s_options_uniq, приводящие к невозможности установки на mysql 5.6
- Ошибка в методе add_brand(), позволяла создать полный дубль бренда.
- Исправлена проблема безопасности, позволяющая скрипту получить доступ ко всей файловой системе, теперь только каталог веб сервера. Спасибо v177rus. К сожалению open_basedir пришлось выключить, так как она влияет на скачивание файлов с удаленных источников.
- Теперь все временные файлы, создаваемые скриптом помещаются внутри каталога веб-сервера. задан параметр php upload_tmp_dir для загружаемых через POST файлов
- Проведен рефакторинг кода средствами phpstorm. Теперь везде есть PHPDoc, почищены неиспользуемые переменные и т.п.
- Включена неиспользуемая настройка 'logfile' в конфиге config/config.ini. По умолчанию simpla/log.txt
- Устранен баг в классе cache при работе через связку var_export / eval
- Добавлено публично естатическое свойство enabled в класс cache, теперь можно переключать кеш отдельно от выставленных настроек в опциях через прямое изменение $this->cache::$enabled = true/false
- Окончательно избавился от методов в бд result() и results(), которые выдавали объект в качестве результата. Возможности манипуляций с массивом и объектом несопоставимы. В общем это породит еще какое-то количество багов, но в перспективе позволит окончательно разорвать порочное наследие Simpla.
- Для возможности максимальной гибкой работы с данными из бд, в класс db добавлен метод row(), который без всяких проверок сразу выдает очередную строку бд в виде ассоциативного массива через fetch_assoc()
- Полностью переписан view/ProductsView.php.
- Переписан контроллер coMaster, сделал ему название попроще, теперь просто root
- Не сохраняется настройка родительской категории в админке.
- Ошибка в features->get_options_ids() не обновлялся кеш.
- Ошибка в api/Config.php, приводящая к неверному определению наличия https
- Исправлены скрипты в способах оплаты (/payment) с учетом того, что теперь все структурированные данные хранятся в массивах, а не в объектах.
- Мелкие исправления стандартного шаблона в части уведомлений пользователя о заказе.
- Исправлено баг в стандартном шаблоне с одновременным добавлением сразу 2 единиц товара за за клик. Исправлена ошибка в библиотеке jquery. При тестировании плугина bender, который сжимает и собирает в бандлы css и js к jquery примешались другие js скрипты из-за чего товар добавлялся в корзину дважды.
- В настройки добавлен параметр "телефон". Доступ из шаблона {$settings->phone}
- Для категорий и товаров добавлено 2 поле для адресе - url2. Предназначено для переезда с другой системы для сохранения видимости в ПС. При попадании на товар или категорию по 2 адресу будет производится redirect 301.
- Окончальтельно изменены названия полей в БД, отвечающих за позицию (position), теперь везде pos
- Изменения плугина smarty resize (api/Design.php). Теперь в случае ошибки в параметрах плугина страница все равно загружается полностью, ошибки аргументов выводятся через dtimer::log().
- Ошибки в метода get_prev_product() get_next_product()
- Мелкие ошибки в тех местах, куда еще не добирался, в том числе в метках заказов, шаблонах уведомлений при заказе
- В случае ошибок в запросе теперь в dtimer::log выводится не только сам запрос, но и метод его вызвавший.
- Добавлен новый метод results_array_grouped() в класс db. Теперь можно получить сгруппированные данные не в одномерный массив, который получается методом results_array(), а двумерный массив, где на первом уровне ключи из заданного поля БД, а на втором уровне все строки, у которых данное поле совпадает.
- Исправлена загрузка изображений товара в админке через drag&drop.
- Исправлены неработающие ссылки вида: site.com/brands/adidas
- Изменены компиляторы smarty для конструкций {if}{elseif}, чтобы ошибки 'undefined variable' подавлялись. Теперь в шаблоне можно использовать {if $unknownvar}, ошибки не будет, даже если переменная не назначена.
- Много мелких ошибок повсюду. И их все еще очень много. Теперь ошибок будет меньше, поскольку новые функции пишу сразу с модульными тестами к ним.
- Обновлена версия Smarty до самой последней dev версии 3.1.32 - dev. Небольшой тюнинг: Включено подавление ошибок smarty undefined variable, но все остальные ошибки E_NOTICE отображаются. Сделано путем правки компилятора, libs/sysplugins/smarty_internal_compile_private_print_expression.php метод compile строка 49.
- Сохранялка бекапов теперь не трогает изображения. Т.е. при сохранении изображения не сохраняются в бекап, а при восстановлении не удаляются, если файлы были.
- Переписан класс ControllerResize. Теперь он может выдавать содержимое изображений в режиме докачки (понимает http заголовок range).
- В целях облегчения модульного тестирования дебагер можно вызвать для вывода информации в консоль. Обычный вызов dtimer::show() выводид информацию в HTML формате, что удобно для отладки из браузера. Для отладки из консоли добавлен метод dtimer::show_console().
- Полностью переписан класс image и products в части изображений. Изображения теперь хранятся в /img Теперь любая сущность в системе может иметь дополнительные изображения, в том числе бренды, категории, статьи блога. Принцип хранения изображений полностью унифицирован. Теперь в основной таблице какой-то сущности хранится основное изображений, а в таблице изображений этой сущности остальные изображения. Например, Для товара с id 1 в записи в таблице s_products есть поле image, в котором хранится запись об основном изображении. Например, image123.png. В таблице s_img_products для этого товара хранятся следующие записи:
id│item_id│basename │pos
--┼-------┼------------------┼-------
1 |1 |image123.png |0
2 |1 |image124.png |1
3 |1 |image125.png |2
Изображение с pos 0 является основным, запись о нем копируется в основную таблицу. Аналогичные таблицы создаются и для остальных сущностей. бренды, категории, статьи блога. Работа с изображения осуществляется с помощью следующих методов: get($type, $filter) update($type, $item_id, $basename) delete($type, $id) add($type, $item_id, $basename) download($type, $image_id) download_new($type, $item_id, $url) upload($type, $basename)
Перечень $type соответствует названию основной таблицы сущности. 'products' для s_products; 'brands' для s_brands; 'blog' для s_blog; 'categories' для s_categories.
- Добавлена возможность группировки свойств товаров.
- Ошибки в js/jquery/jquery.js
- Восстановлена работоспособность плугина fancybox.js в стандартном шаблоне
- Ошибки js/admintooltip/admintooltip.js
- Добавлена библиотека для более качественной работы с удаленными файлами. Является оберткой для работы с не самой простой библиотекой curl. Теперь загрузка файла с удаленного источника происходит через curl->download($src). Скачивание происходит с проверкой размера скачанного файла, а также проверяется последний байт на сервере и последний байт в скачанном файле. Если что-то из указанного не сошлось метод возвращает false. Также в библиотеке есть метод для получения размера удаленного файла curl->remote_filesize($src), а также для докачки частично загруженных файлов curl->read_remote($src, $offset, $length).
- В config/config.ini добавлен параметр watermark true/false для включения/отключения водяного знака.
- Небольшие правки стилей для админки для правильного отображения страницы выбора шаблона.
- Добавлен плугин для шаблонов смарти, который позволяет собирать из js и css файлов бандлы. Минификация и конкатенация в одном флаконе. Идея возникла при изучении cms vamshop, в которой использовалась библиотека Bender производства Alex Raven. Библиотека была доработана и теперь позволяет спокойно укладывать буквально все файлы css js в бандлы через максимально простой код.
//это для включения в бандл файлов исходников
{bender src="/hello/baby.js"}
{bender src="/hello/baby1.js"}
{bender src="/hello/baby2.js"}
{bender src="/hello/baby3.js"}
{bender src="/doit/again.css"}
{bender src="/doit/again2.css"}
//это для вывода в код html итогового бандла
{bender output="/compiled/bender.css"}
{bender output="/compiled/bender.js"}
- Удален мусор (js/ctrlnavigate.js)
- Изменения в обработке параметров конфига config/config.ini и db.ini для совместимости с hhvm, который не в состоянии корректно обрабатывать типы данных, в результате булевые значения true false становились строковыми 1 или 0. Теперь можно запустить на HHVM.
- Поправлен метод db->query() Ошибка была в том, что в случае, если запрос не выполнялся, метод возвращал null, а не false. Теперь все правильно, в случае ошибки возвращает false.
- Если каталога simpla/files/import не существует, контроллеры ImportYmlAdmin.php и ImportAdmin.php создают этот каталог.
- Ошибка в brands->get_brands(). Неверно записывалось задание на обновление кеша.
- Устранены ошибки в плугинах для смарти: "get_posts" "get_brands" "get_browsed_products" "get_featured_products" "get_new_products" "get_discounted_products"
- Правки в шаблонах для отображения изображений из удаленных источников.
- Фикс кнопки закладка для выхода/входа в админку.
- Добавил недостающий в дистрибутиве бекап пустого магазина empty.zip, отсутствие каталога backup приводило к ошибке.
- Изменения скрипта js/baloon/js/baloon.js. Теперь email c 3 или больше буквами на конце работают нормально. Оригинальный скрипт на таких адресах выдавал ошибку.
- Для ускорения из таблицы s_products_categories удалено поле position и изменены индексы. Удалена вторая часть составного индекса category_id -> product_id, поскольку мускуль все равно прицепляет primary key к любому индексу.
- Все цифровые значения сделаны unsigned, чтобы увеличить их диапазон. За счет этого некоторые поля удалось уменьшить до smallint или mediumint.
- Все плугина смарти перенесены из view/view.php, в api/design.php к остальным плугинам смарти.
- Изменена локаль в config.ini с ru_RU.utf8 на en_US.utf8. Сделано потому, что при ru_RU локали разделитель разрядов запятая, а не точка, что неудобно поскольку везде для разделения дробной части используется точка. Проблема проявилась на дебагере dtimer. Дебагер раскрашивает строки в зависимости от доли времени выполнения операции в этой строке от общего времени загрузки страницы. Чем больше доля, тем краснее цвет строки. При включенной ru_RU локали браузер не воспринимает значение цвета из-за неправильного разделителя.
- Исправлены ошибки в ссылках вида $this->page->* в контроллерах view/ProductsView.php FeedbackView.php BlogView.php.
- Аналогичные проблемы page->* и menu-> устранены в шаблонах pages.tpl, page.tpl и контроллерах simpla/PageAdmin.php, simpla/PagesAdmin.php.
- Мелкие доработки контроллера IndexAdmin.php.
- Устранена ошибка ImportYmlAdmin.php, приводящая к созданию валюты несколько раз.
- Исправлена проблема создания опций товаров из карточки самого товара. Изменения внесены simpla/design/product.tpl и simpla/productAdmin.php.
- Включено кеширование для метода brands->get_brands()
- Исправлен класс api->pages в части возвращаемых значений, теперь тут тоже возвращаются массивы, а не объекты. Теперь исправлено теоретически везде, что заметно упрощает адаптацию шаблонов. Простой шаблон адаптируется за 2 клика. Файлы шаблона обрабатываются 5-6 однострочными perl скриптами, которые делают замену кусков кода по регулярным выражениям.
- Исправлена ошибка для работы аякс поиска по старой симпловской схеме ajax/search_product.php. Удобно для шаблонов от симплы.
- Исправлены ошибки в контроллерах view/*. Изменено $page->var на $page['var'].
- Исправлены настройки полей в БД в связи с ошибками на некоторых версиях mysql.
- Исправления ошибок в стандартном шаблоне.
- Исправлена ошибка в features->get_products_ids() влияла на процесс преобразовании ЧПУ в id свойств и id значений свойств.
- Исправлена ошибка simpla/ajax/import.php, при импорте использовался кеш сразу с самого начала загрузки, что приводило к использованию устаревших данных. Теперь на первом цикле сначала загружаются данные без кеша.
- Устранена проблема загрузки изображений по товарам у которых эти изображения скачивались с удаленного сервера. Была проблема при обновлении страницы в связи с тем, что после загрузки изображения информация в БД изменялась (вместо ссылки записывается имя файла), а в кеше, она еще не обновилась. При попытке открыть изображение по старой ссылке изображение не отображалось. Теперь изображения на удаленном сервере передаются html не в виде ссылок на само изображение, а в виде id товара. Контроллер coResize такие изображения обрабатывает так: По id и pos товара в БД запрашивается изображение, которое и идет дальше по конвееру resize-download-return. Если изображение уже было загружено, то со стадии resize изображение сразу будет передано для отображения в контроллер api->coResize.
- Исправлена проблема значений по умолчанию полей timestamp. Оказывается mysql учитывает time_zone при определении диапазона значения этого поля. Т.е. '1970-01-01 00:00:01' и time_zone = '+01:00' делает дату '1969-31-12 23:00:01'. Проблема решена установкой DEFAULT '1970-01-02 00:00:01'
- Изменения в контроллере view/ProductView.php, для упрощения адаптации шаблонов.
- Добавлен метод product->get_product_image($pid, $pos = 0) для вытаскивания конкретного изображения товара
- Устранение мелких недостатков то там, то здесь.
- Фраза для формирования соли, используемой при формировании пароля, сохранена только в переменной класса config->salt_word.
- Устранена ошибка api->design(40) при создании каталога для кеша смарти, mkdir теперь работает рекурсивно, что не вызывает ошибку при отсутствии каталога /compiled.
- Устранены ошибки при импорте/экспорте товаров.
- Добавлен в качестве метода по умолчанию более быстрый способ сохранения кеша. Всего доступно 3 способа: var_export, serialize, json_encode. В зависимости от ситуации, победитель по скорости меняется. Надо будет решить по какому принципу выбирать тот или иной способ.
- Доработал контроллеры, чтобы в случае невозможности парсинга адресной строки, в случае отсутствия конкретной страницы из адресной строки включалась страница 404.
- Небольшие изменения в таблице s_currencies. Добавлен уникальный индекс на поле name. Запрос для изменения.
ALTER TABLE `s_currencies` ADD UNIQUE `name` (`name`) USING BTREE;
- Исправлена ошибка в features/get_product_options().
- Исправлена ошибка на странице каталога товаров в админке (справа не появлялись бренды).
- Устранена ошибка в настройках свойств товаров, когда после импорта не появлялись категории.
- Устранена ошибка в таблице s_users. Некоторые версии субд не позволяют иметь в 1 таблице 2 поля с настройкой default current_timestamp. В связи с этим у поля last_login изменено значение по умолчанию.
- В методе products->delete_image() добавлена проверка, что если удаляемое изображение имеет position 0, нужно удалить запись о нем из таблицы s_products. Там запись об изображении хранится для повышения быстродействия.
- Исправлена кривая ссылка в админке на иконке "Каталог".
- Начата работа по рефакторингу контроллеров админки. Первый контроллер ProductAdmin.php
- Сделана дополнительная проверка имен свойств в методе features->add_feature() для исключения создания дублей одинаковых свойств.
- Дополнительные проверки входных данных на методы products->add_product() products->update_product() для возможности упрощения контроллеров админки.
- Устранение ошибки в методе brands->get_brands().
- Исправлены ошибки контроллера xhr.
- Устранена проблема поиска товаров русскими буквами. Использование русских символов для поиска по полю, в котором хранится ascii невозможно. Поэтому теперь для поиска в таблице артикулов транслитерируется ключевая фраза. Изменены методы get_products, get_products_ids, count_products.
- В связи с удалением поля name в таблице s_images, исправлены методы, работающие с этой таблицей.
- Перетряхнул класс variants.
- Много изменений в типах полей таблиц. Везде где можно изменил DEFAULT NULL. Спасибо Black Hat.
- В таблице s_variants изменена кодировка поля sku на ascii, удалено поле attachment, добавлены поля: price1, price2, price3 для сохраненения разных цен товара, например оптовых и закупочных. Для продолжения работы придется создавать БД заново. Для сохранения товаров проще всего сделать экспорт, потом создание БД заново, а затем импорт товаров.
- Переписан контроллер productAdmin.php. Теперь все разделено по отдельным блокам, просто и логично. Количество кода незначительно выросло, теперь где-то ~400 строк кода, против ~350 в старом контроллере. Весь js очищен от Jquery, теперь ajax добавление связанных товаров работает через xhr контроллер, а не через отдельный php файл, как в симпле. Для полноценной работы по принципу SPA придется сделать api богаче по функциям. Буду добавлять их по мере необходимости.
- Исправлена работа страницы пользователя после авторизации.
- Исправлена работа обновления счетчика товаров в индикаторе корзины.
- Исправлена работа на странице восстановления пароля пользователя.
- Исправлена система восстановление пароля по почте.
- Исправлен пустой список брендов в карточке товара в админке.
- Устранены ошибки в simpla->categories
- Устранены ошибки при экспорте товаров
- Исправлен экспорт товаров.
- Мелкие доработки в xhr контроллере.
- Мелкие исправления в шаблонах админки и дизайна сайта в связи с переходом на изменение формата данных, предоставляемых api. (Simpla возвращала почти всега данные в виде простого числового массива внутри которого содержались объекты, если внутри элементов(свойств) объекта было несколько элементов, они тоже делались числовыми массивами). Очень неудобный для работы формат был полностью изменен. Теперь все только в массивах.
- Исправлено отображение опций товара в карточке товара.
- Запуск/возобновление сессии переведен из index.php в конструктор класса api/Simpla.php. Теперь стартовать сессиию отдельно не требуется, удобно для работы существующих сейчас отдельно ajax скриптах, которые запускаются не через index.php.
- Первые попытки использовать api системы через ajax. На странице корзины при удалении товара, производится запрос к api, в случае успеха удаляется соответствующая строка с товаром.
- Система стала полностью совместима с сервером Nginx. Теперь Apache вообще не требуется. Удалось добиться за счет перевода большей части маршрутизации в саму систему, а не через файлы конфигурации веб-сервера. Simpla всю маршрутизацию делает только через .htaccess. Rapida же наооборот, всю маршрутизацию, в том числе в админ. панели, делает через главный контроллер. Файл конфигурации Nginx или для Apache содержит 2 инструкцию: 1. Все что не является реальным файлом на диске, направлять в /index.php. 2. Все что является реальным файлом на диске открывать непосредственно веб-сервером без участия php. Подобный подход позволяет не нагружать систему простыми запросами статических данных.
- В админку в раздел настройки выведен выключатель кеша.
- В админку в раздел настройки выведен переключатель способа записи кеша. Быстрый или экономный.
- В админку в раздел настройки выведен выключатель отладчика.
- Авторизация администратора переключена на общую авторизацию пользователей.
- Инсталер обучен создавать запись администратора по новой схеме (не через файл simpla/.passwd)
- Раздел настроек пользователя расширен возможностью установки статуса администратора. Для обновления версии БД без перезаписи необходимо выполнить следующие запросы:
ALTER TABLE `s_users` ADD `admin` TINYINT(1) NULL DEFAULT '0' AFTER `enabled`, ADD INDEX `perm` (`admin`);
ALTER TABLE `s_users` ADD `last_login` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `last_ip`, ADD INDEX `last_login` (`last_login`);
ALTER TABLE `s_users` ADD `perm` VARCHAR(200) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT '0' AFTER `enabled`;
ALTER TABLE `s_users` CHANGE `created` `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP();
ALTER TABLE `s_users` CHANGE `enabled` `enabled` TINYINT(1) NULL DEFAULT '0';
ALTER TABLE `s_users` DROP INDEX `email`, ADD UNIQUE `email` (`email`) USING BTREE;
ALTER TABLE `s_brands` CHANGE `url` `url` VARCHAR(255) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT NULL;
- Эффективно работать с оптимизацией БД можно только на большой базе. Разбираюсь с индексами. Выясняется, что в некоторых случаях в БД отсутсвуют элементарные индексы, необходимость которых очевидна. Например, оказалось, что индекс поля created в таблице s_products отсутствует в Simpla. В результате простейший запрос:
SELECT id, name, brand_id FROM s_products WHERE visible = 1 ORDER BY created DESC LIMIT 0, 3
выполняется несколько секунд! - Немного улучшил скорость импорта товаров за счет увеличение количества импортируемых товаров за 1 цикл скрипта simpla/ajax/import.php. Было 10 товаров, сделал 50 и добавил кеширование метода features->get_options_uniq().
- Добавил кеширование метода features->get_options_ids()
- Добавил 3 необязательный параметр при записи в дисковый кеш. Теперь можно использовать более быстрое сохранение и загрузку из кеша. set_cache_nosql($key, $data, $json). Параметр json - необязательный и по-умолчанию установлен в значение true. В этом случае кеш пишется в виде JSON строки с неэкранированными символами UNICODE, перед записью строка для экономии места преобразовывается в кодировку cp1251 (задается в конфиге). Сами функции json_encode/json_decode медленнее на 40%, чем serialize()/unserialize(), а еще конвертация. В общем если 3 параметр задан false, данные сохраняются в виде serialize строки без изменения кодировки. Таким образом экономится примерно 250мс, что из 500мс на загрузку всей страницы. Возможно выведу в опции, чтобы можно было не экономить место и добиться более высоких скоростей.
- Проведена ревизия фундаментальных методов класса db, которые отвечают за работу метода db->placehold(), удален неиспользуемый тип плейсхолдера # - константа. Остальным типам составлено описание, их стало так много, что вспомнить нужный бывает сложно.
- Заметно ускорен импорт товаров за счет сокращения выполнения дублирующихся операций по добавлению брендов, названий свойств. Сами значения свойств теперь добавляются в основном одновременно, одним запросом, а не по одному.
- Класс api/managers удален, теперь управления всеми пользователями, и покупателями и системными пользователями осуществляется через 1 класс api/users.
- Взамен jquery механизма импорта изображений в товар способом "перетаскивание" внедрен более простой механизм на чистом JS. Теперь работает без нареканий.
- Исправлена ошибка в магическом методе config->__get(), которая приводила к ошибке, если переменной в конфиге нет.
- Скорее не устранение бага, а усовершенствование, тем не менее пишу в баги потому что обнаружилось в ходе дебагинга функции импорта товаров. При импорте возврат от insert_id используется в дальнейшей работе, поскольку insert_id() давал 0, на ошибочных запросах, 0 использовался дальше, как нормальное значение. Метод db->insert_id() очень тупо возвращает то, что дает mysqli->insert_id, если запрос не удался - insert_id возвращает 0, что нельзя считать нормальным ответом. Теперь в случае ошибки, db->insert_id() возвращает false. Аналогичное поведение сделал и для db->num_rows().
- Исправление отсутствия отображения брендов на страницах каталога.
- Мелкие исправления то там, то здесь.
- У значений и названий опций обрезаются пробелы по краям на уровне самих моделей update_option() add_feature() update_feature()
- Добавлена возможность импорта сжатых в формате gz файлов csv.
- Теперь экран импорта csv не заполняется импортируемыми товарами, только строка прогресса и отображение progress: x of x kb
- Добавлены новая функции классу dtimer, предназначенному для отладки. Теперь записываемому в журнал сообщению может быть установлен тип 1 - ошибка, 2 - предупреждение, 3 - сообщение. dtimer::log('error', 1). Если тип не задан, сообщению устанавливается тип 3. При отображении тип сообщения выводится в первой колонке и окрашивается в зависимости от типа, ошибка - красный, предупреждение - желтый, сообщение - белый. Теперь для отладки все ошибки будут выводится именно через dtimer, trigger_error больше использоваться не будет.
- Еще 1 функция классу dtimer, теперь вместе с сообщение записывается сколько оперативной памяти занимает скрипт на момент записи сообщения. Память отображатся с параметром real_usage, get_memory_usage(true)
- В api/Simpla.php добавлена функция умной конвертация единиц времени и единиц измерения данных. Теперь функции используюся в index.php и api->dtimer для понятного отображения секунд и мегабайт.
- В config.ini добавлена опция для выключения кеша. cache = false;
- Наконец внедрен мультифильтр опций товаров в каталоге. Теперь можно выбирать сразу несколько опций у 1 фильтра, при этом доступными у остальных фильтров будут только те свойства, которые действительно возможно выбрать.
- Уменьшено количество данных передаваемых для записи в очередь заданий по методу get_options. Вместо $ids, передаются array_values($ids), тем самым сокращая объем за счет длинных ключей массива..
- Избавляюсь от неудобного наследия Simpla. Постепенно изменяю контроллеры на работу с массивами, а не объектами, как изначально заложено в Simpla. get_products(), get_related_products(), get_images(), get_variants(), get_variant(), get_categories(), get_category() (почти все) теперь возвращают массив. Чтобы сэкономить память при создании дерева категорий активно использовалась рекурсия. Дело в том, что в php присвоение объектов происходит по ссылке по умолчанию. Простой тест:
<?php
$o = new stdClass();
$o->prop = 120;
$b = $o;
$b->prop = 100;
print_r($o);
При переходе на массив в категориях нужно было сохранить ссылочное присвоение. Это удалось сделать через оператор ссылки &.
- Для возможности долгой работы скриптов в .htaccess добавлены параметры php_value, в т.ч. max_execution_time 30000.
- Устранен баг view/ProductsView.php. Были ошибки для товаров без изображений.
- Устранен баг api/ControllerMaster.php при открытии страниц 1 уровня (/cart/ /blog/).
- Изменены права доступа к создаваемым файлам кеша на 755. Устранена баг, связанный с некорректным выставлением прав доступа на файл из переменной. chmod($file, 755) не тоже самое, что $var = '755' chmod($file, $var). Все дело в том, что при непосредственном указании параметра в функцию, параметр воспринимается как восьмеричное число. Если установление параметра происходит из переменной, число это будет или строка значения не имеет. Значение воспринимается как десятеричное число, которое конвертируется в восьмеричное. Для устранения этой проблемы в конструкторе класса cache, значение параметра default_chmod из config/config.ini сразу преобразуется из восьмеричного в десятеричное. Соответственно дальше при преобразовании в функциях mkdir chmod их фактическое значение не изменяется.
- Устранен небольшой баг в coMaster->parse_uri_path(). Некорректный формат адресной строки приводил к ошибке.
- Исправлена ошибка simpla/FeaturesAdmin.php. Изменение сразу нескольких свойств не работало.
- Устранена ошибка в методе features->get_options() при формировании keyhash.
- Устранены баги с открытием страницы регистрации пользователя /register и поиска товара /search
- Устранен баг в карточке товара в админке. Ошибки в опциях товара после сохранения изменений.
- Начата работа по новой структуре контроллеров (в терминах Simpla - модуль). На смену маршрутизации через файл .htaccess, создан главный контроллер (coMaster). Все новые контроллеры для порядка расположены в каталоге api и подключаются, аналогично всем классам из файла api/Simpla.php. Теперь все, что делает .htaccess - направляет все запросы файлу index.php, или в admin/index.php. Остальная работа выполняется главным контроллером. Принцип работы такой: Главный контроллер производит первичный разбор адресной строки. В случае, если в get части запроса есть параметр xhr, эстафета передается контроллеру XHR запросов (coXhr), во всех остальных случаях работу продолжает контроллер Simpla (coSimpla), который работает по принципу заложенному в Simpla (подключает контроллер view/IndexView.php). В связи с этими изменениями потребовалось изменение способа формирования ссылки плугином для Smarty resize (api/Design.php), Теперь ссылка на файл формируется сразу в get параметр url, а не как раньше прямым текстом в адресной строке.
- Внедрены ЧПУ ссылки.
- Для работы ЧПУ добавлено поле trans в таблицу s_options_uniq. Полю trans задана кодировка ascii, если в дальнейшем понадобится создание индекса по этому полю. Индекс с ascii меньше, чем c utf8. В настоящее время поле trans используется исключительно для отображения, поиск происходит только по полям id и md4.
ALTER TABLE `s_options_uniq` ADD `trans` VARCHAR(512) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT NULL AFTER `val`;
ALTER TABLE `s_features` CHANGE `uri` `trans` VARCHAR(200) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT NULL;
- Исправлен баг в js скрипте simpla/design/html/product.tpl. Поскольку добавление картинок перетаскиванием работает только, когда товар уже создан - при создании товара поле для перетаскивания скрыто.
- В админке ссылка "открыть товар на сайте" появляется сразу при открытии товара.
- Исправлена ошибка view/ProductView.php. Дублировались варианты товара.
- Изменен механизм поиска с заданным брендом и опциями, теперь брендов, как и опций можно выбрать сразу несколько. Пример части адресной строки с несколькими брендами сразу "/brand-citilux.ideal_lux.arte_lamp.st_luce/"
- Исправлен ajax/search_products.php. Подсказки в поисковой строке.
- Исправлена ошибка products->add_image() в нумерации поля position в таблице s_images. Первое изображение должно иметь позицию 0
- Изменена кодировка полей task в таблицах s_queue s_queue_full. Раньше там была ascii, сейчас utf8, иначе неправильно сохраняются задания в которых присутствуют русские буквы. Такие задания возникают при выполнении поисковых запросов.
- В методе products->add_image() изменена логика, теперь при добавлении картинки с position 0, сразу вносится запись в таблицу s_products в поле image. Раньше туда изображение попадало только во время манипуляций с картинками, например, в админке. Т.е. требовалось выполнение метода products->update_image()
- В методе image->download_image() при скачивании изображение с position 0, сразу изменяется 2 таблицы s_image и s_products.
- Добавлен доступ к api через xhr. Для удобства работы необходимые функции собраны в файле js/main.js. Непосредственно для работы с api нужна 1 функция apiAjax(). В целях безопасности доступ разрешен только к следующим классам: $allowed['classes'] = array('products', 'brands', 'variants', 'features', 'image', 'cart', 'blog', 'comments'); $allowed['methods'] = array('get_products', 'get_product', 'get_variants', 'get_variant', 'get_features', 'get_options', 'get_cart', 'get_brands', 'get_brand', 'get_comments', 'get_comment', 'get_images');
- Небольшой баг в view/ProductsView.php и view/ProductView.php, при переборе вариантов товара, отсутствующего на складе. varints->get_variants() возвращал false, а потом производился перебор, что приводило к ошибке.
- В метод db->dump_table() добавлен 3 необязательный аргумент $skip_create, если true - таблица не удаляется и не создается заново. Вместо drop table; create table - выполняется очистка таблицы truncate table. Метод используется при создании дампа.
=================
=================
- Исправлены ошибки в install.php Теперь инсталер может создавать отсутствующий config/db.ini, /simpla/.htaccess и simpla/.passwd
- В связи с ошибками на dev сервере mysql, пострадала таблица начальной БД ./rapida.sql в прошлом релизе 0.0.7.1. Проблема устранена.
- Исправлена ошибка при создании файлов кеша, при создании каталогов кеша неверно устанавливались права доступа, что приводило к ошибке на хостинге, теперь права устанавливаются 755. То есть для хозяина файла: чтение, запуск и выполнение, для остальных - чтение и запуск.
- Исправлена ошибка в db->dump_table()
- Исправлена некритическая ошибка в работе функции sys->download_all_images()
- Исправлен simpla/ajax/export.php
- Исправлен simpla/ajax/import.php
- Исправлен variants->add_variant()
- Исправлен variants->get_variant()
- Удален каталог simpla/update Похоже раньше он предназначался для обновления версий.
- Поправил все методы add_ на добавление чего либо в БД Теперь прежде чем сформировать запрос, отсеиваются пустые значения, СУБД сама ставит пропущенные поля в значения по умолчанию.
- Добавлен фильтр "Без изображений" в разделе "Товары" админ. интерфейса.
- Оптимизированы SQL запросы по фильтрам in_stock "Нет на складе" и discounted "Со скидкой" в методах get_products() count_products()
- Исправил метод db->dump_table() Теперь данные таблиц сохраняются правильно, bin значения преобразуются перед записью в hex, цифровые - без кавычек, прочие символьные - в кавычках с экранированием, все остальное просто в кавычках.
- теперь настройки доступа к БД вынесены в отдельный файл config/db.ini, чтобы можно было обновлять систему через git. Необходимые изменения внесены в класс config
- Удален старый генератор YML фида yandex.php.old
- Устранена куча мелких ошибок в разных местах.
- Исправлен фильтр in_stock в методах get_products count_products
- В раздел "Автоматизация" добавлен новый подраздел "Обслуживание системы". В нем собраны собраны операции с системой. Например: Очистка от лишних записей таблицы уникальных значений свойств товаров, во время работы системы эта таблица только пополняется новыми записями, какие-то из этих записей перестанут относится хотя бы к одному товару и их можно будет удалить из таблицы. При импорте товаров с изображениями с внешних источников в базу данных записывается ссылки этих изображений, но загрузка и сохранение происходят только при обращении к соответствующей картинке. Если товаров и картинок много, удобно загрузить сразу все изображения с внешних источников.
- Создал новый класс System sys, в нем будут методы, которые используются редко и не предназначены для повседневной работы. В перспективе в этот класс переедут все такие методы, так мы разгрузим память от лишнего.
- Перенес метод sync_options() из features->sync_options() в features->sys->sync_options()
- Исправлен мелкий баг в файле simpla/OrdersAdmin.php от страницы со списком заказов.
- Исправлен аналогичный баг в файле simpla/OrderAdmin.php от страницы выбранного заказа.
- Исправлен баг с загрузкой изображений с внешнего источника https://
- Исправлен баг при создании товара через админку simpla/ProductAdmin.php
- Теперь система не только php7, но и MySql 5.7 совместимая.
- Очень значительное с технической точки зрения изменение. Изменена структура хранения свойств товаров. Теперь таблица s_options горизонтальная, а не вертикальная. В ней хранятся id товара, id свойств по столбцам, и значения id самих значений свойств. Значения свойств хранятся в отдельной таблице s_options_uniq. Тут записаны id, уникальные значения свойств товаров и md4 хеши значений в шестнадцатеричном формате bin(16). В классе db небольшие доработки внесены в методы results_array results_object, в классе features почти все методы переделаны под новую систему хранения свойств, добавлены новые методы для работы с более сложной структурой хранения. Переделаны также методы get_products и count_products из класса products, которые в основном используются для отображения товара и подстчета количества страниц в витрине товаров.
- В связи с вышеназванными изменениями ссылки с выбранными фильтрами теперь выглядят не так: site.com/catalog/phones?1=gsm, а вот так: site.com/catalog/phones?1=123. Т.е. теперь вместо значений id.
- При тестировании на Mysql 5.7 x64 обнаружилось, что теперь СУБД более строго подходит к значениям полей "по умолчанию", если поле demo записано без значения по умолчанию, то запрос вида INSERT table SET some = 23 не пройдет так как не указано значение для поля demo. Если поле some стоит как integer, то запрос UPDATE table SET some = 'text' не пройдет. В этой связи в огромном количестве мест пришлось вносить правки.
- Немного улучшил работу модуля backup, раньше он создавал пустой каталог files/products (в нем система пишет миниатюры изображений), т.е. если у вас там .htaccess, то он в архив не попадал. Сейчас все файлы, которые начинаются с точки в архив попадают.
- Во всех таблицах БД поставил DEFAULT NULL всем полям, которые могут быть пустыми.
- Переделал simpla/ajax/export.php. Для нормальной работы в кодировке cp1251, раньше использовалась глючная схема изменением кодировки на соединении с БД через set names, а также с установкой set_locale. Все это убрал, и вставил iconv непосредственно перед записью в csv. Т.е. БД и PHP работают в UTF-8 и только запись на диск идет в cp1251.
- Изменил метод db->dump_table(), теперь создаются не только данные, но и сама таблица.
- Отключил type hinting в тех функциях, где я уже успел его использовать. Теперь система работает не только на php7, но и на php5.
- После включения кеша, возник баг с открытием страниц товара в админке. Устранен.
- В демонстрационную инсталяционную базу, которая создается на этапе установке системы, добавлены недостающие таблицы s_queue рабочая очередь задач. s_queue_full очередь задач для сохранения всех задач (не очищается автоматически) s_cache_integer для записи кеша цифровых значений.
- Расположение файлового кеша по умолчанию изменено на cache в корневой директории системы
- Раньше к имени директории, которая создается для кеша в конце дописывался дефис. securityKey = mysite становилось mysite- Теперь так больше не делает.
- Удалены лишние файлы simpla/LicenseAdmin.php и simpla/design/html/license.tpl
- Удалены хвосты из файла simpla/design/html/index.tpl от интеграции с сервисом "простые звонки"
- В целях удобства в классе config api/Config.php, который отвечает за работу с config.ini добавлена парсинг ini файла по секциям, теперь в классе создана публичная переменная $vars_sections, где настройки config.ini, распределены по секциям. Например, настройки кеша доступны $this->config->vars_sections['cache']
- устранена ошибка в методе cache->encode() (убрал лишний аргумент, который не использовался $param)
- настройки кеша выведены из api/Cache.php в config/config.ini
- Добавлено кеширование на диск по самой "тяжелой" функции системы features->get_options(). Пожалуй, кеширование этой функции - самый эффективный тюнинг скорости который можно сделать. Время загрузки не самого большого раздела сократилось до 170мс, без кеширования это время составляло около 4с.
- Исправлен баг с работой функции products->get_products(). В начале функции из $filter (аргумент функции) удалялись лишние параметры. Было сделано для того, чтобы не захламлять кеш лишней информацией, но применительно к функции get_products удалялись $filter['page'] $filter['limit'] $filter['sort'], в результате при переключении пагинации в разделах сайта, товары не изменялись.
- Исправлен баг с тем, что пользователь отображался авторизованным даже, когда авторизации не происходило. view/View.php
- в файле шаблона cart.tpl исправлен баг, приводящий к ошибке, когда пользователь не авторизован. {if $user->discount} заменено на {if isset($user->discount)}. Аналогичный баг исправлен в view/CartView.php в части $coupon_request, теперь, если действующих купонов нет, все равно в шаблон передается переменная $coupon_request, но со значением false. Стараюсь устранять ошибки, которые раньше не отображались в связи с тем, что отображение ошибок типа notice было принудительно отключено. К сожалению не всегда удается обойтись без исправлений в шаблоне. Потенциально в других шаблонах возможно повторение этих ошибок.
- Изменен метод features->get_features(), теперь он тоже, как и products->get_products() выдает объект сразу сгруппированный по id, соответствующие изменения внесены в другие места, где используется данный метод.
- Изменен метод db->results(string $field = null, string $group_field = null), теперь он работает аналогично, results_array с той разницей, что выдает массив с объектами внутри, а не массив с массивами внутри. = Добавлены файлы для выполнения очереди задач через cron. Выполнить задания из очереди cron/queue_exec.php. Посмотреть кол-во заданий в очереди cron/queue_count.php
- Добавлен метод db->results_object(string $group_field = null) и изменен db->results_array(string $group_field = null). Работают сходным образом, с той разницей, что один выдает объект, а второй массив.
- На метод products->get_products() прикручен дисковый кеш через методы cache->set_cache_nosql() cache->get_cache_nosql(). Кеш пишет на диск вывод метода products->get_products в виде json строки, а при чтении из кеша, преобразует json строку обратно в объект.
- Мелким изменениям подверглись почти все файлы view/.php и simpla/.php в связи с использованием в методе products->get_products() нового метода db->results_object(). Пришлось изменить на новый метод в связи с тем, что дисковый кеш cache->set_cache_nosql() и cache->get_cache_nosql() используют для записи на диск функции json_decode json_encode, которые все пишут в объект. В результате при обратном преобразовании ф-цией json_decode данных из кеша с диска невозможно было восстановить, объекты, как объекты, а массивы, как массивы. Теперь все данные выводятся чистыми объектами.
- Внесены изменения в методы products->get_products() и products->get_related_products(), теперь результат выполнения сразу группируется по id, соответствующие изменения внесены во всех случаях использования этих методов.
- Изменен метод 'products->add_image()'. Оптимизирована работа. Кол-во запросов уменьшено до 2. Первый запрос определяет максимальную позицию изображений товара, 2 запрос добавляет новое изображение товара, сразу устанавливая позицию макс. знач. + 1.
- Исправлена ошибка в simpla/ProductAdmin.php message_error добавляется в шаблон в любом случае, если ошибки нет - добавляется пустой message_error.
- В файле simpla/index.php удалены указания на несуществующий дебагер, добавлен дебагер dtimer::show(), также как в файле /index.php
- в методе request->url иправлена ошибка. Если при парсинге адресной строки через $url = parse_url($_SERVER['REQUEST_URI']) в полученном массиве нет элемента 'query' (часть после ?) $url['query'] - вылетала ошибка. Теперь добавлена предварительная проверка и ошибка больше не вылетает.
- Удалена поддержка сервиса "Простые звонки"
- Исправлена ошибка в view\ProductsView.php в части перечисления свойств товаров $features.
- Устранены мелкие баги (Какие именно не помню)
- Добавлен метод в класс db public function results_array(string $field = null, string $group_field = null). Основная фишка - поле группировки, позволяет избежать двойной работы, когда сначала в методе db->results происходит перебор и запись строк в объект, а потом, например, во view/ProductsView.php происходит перебор: foreach($this->products->get_products($filter) as $p) $products[$p->id] = $p; только, чтобы записать id товаров в виде ключей массива. $this->db->results_array(null, 'id') выдаст результат в виде массива с ключами из поля id.
- Добавлен отладчик ошибок dtimer в виде отдельной библиотеки api/Dtimer.php
- В config.ini выведена опция dtimer_disabled для включения/выпключения отладчика. Когда опция true, вызовы метода отладчика на запись dtimer::log('info') и на вывод журнала отладчика dtimer::show() не срабатывает и не забивает память. dtimer_disabled = false включает запись событий в отладчик, а также включает отображение журнала. Вызов происходит из файла index.php. Отладчик записывает текстовую строку, а также время записи этой строки в журнал отладчика.
- Добавлена библиотека кеширования cache api/Cache.php и библиотека очереди queue api/Queue.php. Пока используется для кеширования только одного метода product->count_products(). Механизм работы. При обращении к методу по входным параметрам в массиве $filter формируется md4 hash, который через метод cache->get_cache_integer() ищет в базе сохраненный кеш, если кеш не найден, происходит полное выполнение метода count_products(), в конце перед return происходит запись в кеш через метод cache->set_cache_integer(). Очередь заданий queue используется следующим образом. метод queue->addtask($keyhash, 'name', $task); пишет в очередь заданий задачу на выполнение count_products() без использования кеша с последующим обновлением результата в кеше. За счет этого кеш постоянно обновляется, но обновление происходит в отдельном процессе вызываемом планировщиком cron, т.е. для пользователя функция выполняется быстро, а сложная работа протекает на фоне.