Rapida Форк на базе simpla 2.3.8

Поэтому индексы лучше навешивать на одно поле типа int (bigint). Так они занимают не более 8байт. А в поле хранить преобразованный в десятичное число md5-хеш (я усекаю до 15 символов) нужных вам столбцов. По много миллионной базе запросы практически мгновенные получаются.
С кешем я уже так и сделал, только взял md4, а не md5 (пошустрее по тестам) и в базу их пишу bin(16), но твой вариант сделать десятичным числом и урезать до 15 символов кажется еще короче выходит?
<-------------- добавлено через 1410 сек. -------------->
нужно на REST переходить. Полностью. Я кстати уже в этом деле дергался) заканчивать лень)
Что за REST? Как на него переходить и зачем?

Разработка забуксовала на такой ерунде, что даже обидно.
Пару дней ковырялся с переписыванием логики хранения свойств товаров. Спасибо форумчанам из ветки БД за дельные советы. Все сделал - заработало.

Но чем дальше я ухожу от симплы, тем сложнее сохранять неизменными файлы шаблона. Автор симплы зачем-то везде использовал способ вывода данных из БД в форме микса объектов и массивов. Видимо сделал это для красоты
Код:
$a->b
, круче чем
Код:
$a[b]
Вот только с объектами кучи вещей нет, вроде array_push или просто $a[] , в объектах нельзя сделать array_keys или array_key_exists, нельзя создать объект сразу, чтобы без преобразований вроде (object)array(1,2,3). В общем я считаю, что объекты для хранения данных не самая лучшая идея, особенно комбинированный вариант, массивов и объектов.
Наверное, сделаю все на обычных массивах, а уже в конце непосредственно перед передачей чего-то в шаблон буду преобразовывать в нужные объекты, чтобы продолжали работать шаблоны.
 
А в поле хранить преобразованный в десятичное число md5-хеш (я усекаю до 15 символов) нужных вам столбцов.
Как на счет коллизий на выборку? А целостность как поддерживается, если я, например, ручками обновлю столбец, по которому построен хеш.
> Автор симплы зачем-то везде использовал
Это не только симпла этим страдает. В джумле есть тоже самое loadObjectList - в виде объекта, loadAssocList - в виде массива. Это кому как удобнее.
> а уже в конце непосредственно перед передачей чего-то в шаблон буду преобразовывать в нужные объекты
Вы не представляете, как можно извратиться с PHP. Попробуйте это:
Код:
<?php

class MyCoolClass extends ArrayObject {

  public function __set($var, $val) {
    echo '__set' . PHP_EOL;
  }

  public function offsetGet($offset) {
    echo 'offsetGet' . PHP_EOL;
  }

}

$MyCoolClass = new MyCoolClass();
$MyCoolClass->a = 'test';
echo $MyCoolClass['a'];
И посмотрите синтаксис mysql_fetch_object
 
Как на счет коллизий на выборку? А целостность как поддерживается, если я, например, ручками обновлю столбец, по которому построен хеш.
Коллизия решается прописыванием доп условий. Например хеш по трем столбцам, ищем по хешу и трем столбцам. Никаких тебе коллизий. Скорость от того не меняется. А ручками не меняй. Это удел скрипта.
<-------------- добавлено через 345 сек. -------------->
Хотел услышать, что для вычисления хеша надо использовать триггеры на вставку и обновление.
Используйте :)
 
RAPIDA 0.0.4 ecommerce CMS SimplaCMS 2.3.8 fork
=================
v0.0.2 12.10.2017
=================
- Добавлен отладчик ошибок 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, т.е. для пользователя функция выполняется быстро, а сложная работа протекает на фоне.

Подскажите пожалуйста, как найти версию v0.0.2 ?
 
Подскажите пожалуйста, как найти версию v0.0.2 ?
Все версии, которые записаны в changelog можно достать с Для просмотра ссылки Войди или Зарегистрируйся

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

RAPIDA Ecommerce CMS
SimplaCMS 2.3.8 fork

****************
Changelog
****************

=================
v0.0.6 19.10.2017
=================
- Очень значительное с технической точки зрения изменение. Изменена структура хранения свойств товаров. Теперь таблица 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(), теперь создаются не только данные, но и сама таблица.



=================
v0.0.5.3 15.10.2017
=================
- Отключил type hinting в тех функциях, где я уже успел его использовать. Теперь система работает не только на php7, но и на php5.

Rapida 0.0.6
 
Последнее редактирование:
Как на счет коллизий на выборку? А целостность как поддерживается, если я, например, ручками обновлю столбец, по которому построен хеш.
> Автор симплы зачем-то везде использовал
Это не только симпла этим страдает. В джумле есть тоже самое loadObjectList - в виде объекта, loadAssocList - в виде массива. Это кому как удобнее.
> а уже в конце непосредственно перед передачей чего-то в шаблон буду преобразовывать в нужные объекты
Вы не представляете, как можно извратиться с PHP. Попробуйте это:
Код:
<?php

class MyCoolClass extends ArrayObject {

  public function __set($var, $val) {
    echo '__set' . PHP_EOL;
  }

  public function offsetGet($offset) {
    echo 'offsetGet' . PHP_EOL;
  }

}

$MyCoolClass = new MyCoolClass();
$MyCoolClass->a = 'test';
echo $MyCoolClass['a'];
И посмотрите синтаксис mysql_fetch_object

интересно. :)
только вот с ходу не пойму как мне это использовать в быту. Да и нет проблемы преобразовать даже многомерный массив в объект и обратно через json_encode() json_decode(). проблема в том, что везде по-разному. практически невозможно работать по памяти. а самое плохое, что самый экономный способ записи в файловый кеш php сущностей - запись в виде json. json проц. на 10 может быть компактнее того, что делает ф-ция serialize(), а может и больше, если что-то мелко нарезанное там будет. Но json теряет информацию объект это или массив. поэтому я сейчас просто шлепаю, как мне удобнее, а потом буду под шаблон эталонный затачивать.
тут еще проблема с этим, дефолтный шаблон еще сам допилить надо, чтобы он notice ошибки не делал.
автор симплы тупо вырубил notice и голова не болит. :)
 
Последнее редактирование:
теперь выглядят не так: site.com/catalog/phones?1=gsm, а вот так: site.com/catalog/phones?1=123. Т.е. теперь вместо значений id.
а не навредишь ли ты SEO часом ? Имя свойства может попадать под ключевые слова с вхождением, а вот id у каждого разный (товара/магазина) и для SEO вообще безполезный
 
а не навредишь ли ты SEO часом ? Имя свойства может попадать под ключевые слова с вхождением, а вот id у каждого разный (товара/магазина) и для SEO вообще безполезный
Чпу адреса еще предстоит сделать. Сейчас решается основная проблема симплы - скорость и фильтры.
Просто чпу хочу сделать по-человечески, чтобы сразу на входе весь адрес разбирался полностью, а не как сейчас с участием .htaccess
Тут наколхозить, там наколхозить, так через неделю ясность улетучится.

Народ, подскажите как по уму организовать тестирование компонентов системы?
<-------------- добавлено через 1041 сек. -------------->
Поэтому индексы лучше навешивать на одно поле типа int (bigint). Так они занимают не более 8байт. А в поле хранить преобразованный в десятичное число md5-хеш (я усекаю до 15 символов) нужных вам столбцов. По много миллионной базе запросы практически мгновенные получаются.
<-------------- добавлено через 1730 сек. -------------->

Фишка в том что число будет занимать максимум 8 байт, как и его индекс. md5 и так самый быстрый, а нативного md4 в php по моему нет. урезаю до 15 символов, чтоб не было проблем с конвертацией base_convert, поле должно быть BIGINT UNSIGNED.
8 байт это здорово, а md4 в php есть. Hash('md4', $string). Надо потестить на моей большой базе, будут ли дубли в случае с 15симв. Bigint
 
Простите если буду не прав.
Я считаю:
1. Убрать "Простые звонки", вместо этого сделать окно для вывода кода CallBack
2. Вшить Для просмотра ссылки Войди или Зарегистрируйся
3. Сделать отзывы с фото и виджетом на главной из коробки
4. Летелку товаров сменить на окно уведомление (не на всех моб. устройствах видно, что товар добавлен)
5. Из коробки сделать "Оплата после подтверждения менеджером" с возможностью чек-бокс выбора в админке показывать или нет.
6. Настроить SEO и Яндекс.Метрику Коммерция
7. Определение клиента (город )и вывод информации в зависимости от (города)
 
Назад
Сверху