- Статистика пользователя
Денис Ефремов
-
Реактивный фреймворк для private frontend(админка), и возможность подключения к public frontend
Денис Ефремов Обновлен 8 лет назад в категории CMS Админ. панель 1
Здравствуйте, ув. разработчики!
Итак, на дворе середина 2016.
Мне кажется пора уже в ReadyScript - которую лично я считаю достаточно современной CMS, а также довольно-таки "модерновым" CMF - использовать преимущества реактивных фреймворков. Тем более, что технология, уже доросла до использования в "production environment", так как, прожевано и выплюнуто первое поколение реализаций - Angular 1, Backbone, Knockout - я считаю уже не актуальными, рективно-неповоротливыми монстрами...
Вы, я уверен, в курсе всего этого, хотя, возможно мнения наши где-то разнятся.
Сейчас наступает эра "легковесного" JS. Отказ от тяжеловесных "либсов", таких, как jQuery, в пользу, например UmbrellaJS, или вообще, VanillaJS, если речь о ES5.
Либо, аналогичным образом про ES6 можно сказать, что мы наблюдаем переход на использование reactive-data-binding библиотек нового поколения, например VueJS (которую я, после длительного анализа, выбрал для своих разработок) вместо Angular, React или Ember. Хотя Vue поддерживает и совместное обитание с этими и другими фреймворками (jQuery), и не только с JS (Laravel).
По своему опыту могу сказать, что прирост производительности, после смены инструментов реализации, не надуманный. Он реально есть и виден даже невооруженным взглядом.
Оценивали ли вы вариант включения одной из Reactive библиотек в "коробку" ReadyScript? -
Многомерные комплектации. Добавление CSS класса к характеристикам с 0 остатком.
Денис Ефремов Обновлен 9 лет назад в категории CMS Общий функционал 0
Вопрос уже поднимался. Суть его в том, чтобы добавлять к характеристикам многомерных комплектаций на карточке товара класс .empty
Ждал я долго, думал что вы напишете, но клиент потребовал реализации и пришлось писать. Заморочка, конечно, была та еще.
В общем, вот 2 метода, которые нужно добавить в jquery.changeoffer.js, а затем вызвать первый метод в конце changeMultiOffer таким образом - checkEmptyOffers(selected):
/**
* Вычисляем характеристики, для которых нет в наличии товаров
* @param {obj} selected Массив выбранных характеристик checkEmptyOffers
*/
checkEmptyOffers = function(selected) {
// Из массива выбранного делаем объекты данных для каждой хар-ки отдельно
selected.forEach(function(el, i) {
// Исключаем выбранное значение из возможных
var t = selected.filter(function(v, idx) {
return idx != i;
});
disableOptions({ // готовим объект и передаем его метод для изменения DOM
name: el.title, // имя хар-ки по которой проходим
activeValue: el.value, // выбранное значение хар-ки
disabled: [], // сюда отфильтруются только нулевые остатки из всех siblings (ниже)
// фильтруем компл, оставим только актуальные для выбранных значений
siblings: data.options.multiOffersInfo.filter(function(v) {
// здесь ишем чтобы не совпадало с выбранной по которой проходим но совпадало с
return v.info.every(function(a) { // выбранными остальными
return (a[0] == el.title && a[1] != el.value) || t.some(function(o) {
return JSON.stringify(o) === JSON.stringify({ // объекты только так сравнивать)))
title: a[0],
value: a[1]
});
});
});
})
});
});
},
// @TODO перенести формирование disabled в метод checkEmptyOffers, тк disableOptions должен только DOM заниматься
// @TODO избавиться от промежуточного siblings.
/**
* Зачеркиваем характеристики
* @param {obj} data Массив данных
*/
disableOptions = function(d) {
var $listEl = $('[data-prop-title="' + d.name + '"]'),
$items,
getValueByName = function(name, info) { // хелпер. @TODO вынести объявление рядом с in_array()
return info.filter(function(ar) {
return ar[0] == name;
})[0][1];
};
d.disabled = d.siblings.filter(function(s) { // сюда фильтруем только остатки 0
s.title = d.name;
s.value = getValueByName(s.title, s.info);
return s.num < 1;
}); // @TODO этот фильтр в checkEmptyOffers вместо siblings
// Далее нужно получить набор $items $(jQuery(obj))
$items = getItems
// И само зачеркивание
$items.removeClass('empty');
d.disabled.forEach(function(val) {
$items.each(function(i, el) {
var _this = $(this);
if (_this.text().trim() == val.value) {
_this.addClass('empty');
}
});
});
},
Конечно не круто, то что вложенных циклов много, но другого я не придумал пока. Что-то не лезет в голову ничего изящнее)
Думаю, что после доработок, неплохо было бы его включить в коробку.
-
Порядок отображения характеристик.
Денис Ефремов Обновлен 9 лет назад в категории CMS Админ. панель 0
Порядок отображения характеристик на карточке товара (на фронте) зависит от порядка расположения опций на вкладке "комплектации" (в админке).
Чтобы изменить этот порядок, необходимо:
- стереть название
- написать новое
- изменить списковую характеристику
- проделать те же 3 пункта для второй характеристики
Я предлагаю для этого блока в админке добавить плагин из арсенала jqueryui, который позволяет с помощью drag&drop менять порядок расположения элементов в списках. -
Readyscript без функционала магазина, как универсальная CMS. Возможно ли?
Денис Ефремов Обновлен 9 лет назад в категории CMS Общий функционал 19
Здравствуйте, уважаемые разработчики CMS Readyscript.
Очень может быть, что я не открою Америку, предложив то, что собираюсь. Наверняка вы, как команда разработчиков, уже обдумывали похожий вариант.
Начну издалека.
Веб-разработка - это же не только интернет-магазины, существует еще масса разных и интересных задач. Я, например, недавно делал сайт-конкурс в котором люди должны иметь возможность выкладывать свои работы (музыка-фото-видео), плюс ко всему там реализована система модерации загруженного пользователями контента. Или возможны даже варианты еще проще, как какой-нибудь одностраничный лендинг с парой форм, картой и несколькими галереями фото.
Скажу вам честно - после работы с Readyscript у меня возникло желание иметь возможность разрабатывать сайты и веб-приложения, не включающие в себя функционал интернет-магазина, на вашем движке, только, возможно, немного видоизмененном (с вырезанными лишними модулями, полноценным конструктором контента и т.д.). Уж очень понравился мне целый ряд вещей, которыми обладает CMS Readyscript, например - MVC, расширяемость, скорость, дизайн админки, документация и еще несколько приятных мелочей. Реакция на AJAX запросы - особо порадовала.
До настоящего момента, задачи, подобные описанным выше, мне приходилось решать с помощью CMS/CMF MODx Revo. Я считаю, что это одна из наиболее удавшихся "широкопрофильных" CMS на сегодняшний день. Однако, этот вариант не идеален по ряду причин.
Объективно:
1. ExtJS очень сильно ухудшает удобство и замедляет админку (есть даже программисты, бойкотирующие MODx только из-за "тупой" админки, несмотря на все плюсы этой CMS), jQuery UI даст 100 очков форы;
2. урезанный Smarty с измененным синтаксисом удобен только пока ты не попробовал полноценный;
и субъективно:
3. стиль написания программного кода Readyscript лично мне понятнее и приятнее, нежели MODx, и дело тут не в русских комментариях к коду. Хотя в офф. документации к MODx и сказано, что система построена на MVC, на деле это какой-то странный MVCC (Model-View-Controller/Connector), и совсем по другому дело обстоит в CMS Readyscript - почти идеальная классическая MVC архитектура, все просто и понятно.
4. делать магазин на MODx используя плагины магазинов, не очень удобно по причине того, что некоторые вещи имеющиеся в Readyscript из коробки, на MODx не имеют реализации даже в виде плагинов, например - многомерные комплектации.
5. синтаксис ORM приятнее чем xPDO (это вкусовщина, я понимаю, но особенно раздражают описания структур объектов на XML).
В связи со всем вышесказанным, я бы хотел предложить вам выпустить noShop версию движка для создания блогов, визиток и простеньких сайтов, с возможностью расширения функционала.
P.S. Конечно, лично я, как разработчик хотел бы, чтобы описанный продукт распространялся свободно. Я полагаю, что выпуск Open Source продукта, благотворно повлияет на раскрутку и, как следствие, на количество установок и численность сообщества, также имеет место тот факт, что убедить заказчика разработки использовать неизвестную бесплатную CMS гораздо легче, чем неизвестную платную.
Однако, я понимаю, что вам виднее - брать деньги за свой труд или нет, и не собираюсь вам навязывать. Могу только заметить, что в целом даже готов (но не горю желанием) заплатить, в пределах разумного, за удобство разработки не e-commerce сайтов, как уже заплатил за удобство разработки магазина.
P.P.S. Считаю необходимым добавить, что CMS MODx также обладает и рядом плюсов, упрощающих разработчику жизнь, которые я бы был рад встретить в новых версиях Readyscript:
1. Плагин "Консоль" - представляет из себя php-консоль в которой подключен Framework, позволяет выполнять произвольный код и видеть результат выполнения (html + source).
2. Редактор Ace, встроенный в MODx, интегрирован в систему глубже:
- обрабатывает больше комбинаций клавиш, например ctrl+s(сохранить) перехватывает, как и почти везде в системе;
- подсвечивает теги MODx в квадратных скобках (можно сделать, чтоб понимал синтаксис smarty в фигурных);
- обладает функционалом EMMET для HTML и CSS;
- есть Linter в реальном времени для PHP и, по-моему, JS тоже, не помню точно.
3. Разделение на контексты - хорошая штука (по умолчанию два: mgr - админка и web - сайт), позволяет много чего, например быть залогиненым в админке и на сайте под разными пользователями, или реализовывать многоязычность, или, вообще, сделать разные сайты на одном движке, или хранить произвольные данные в другом контексте, но в базе в виде объектов modResource и т.д. зависит от фантазии.
4. Дополнительные поля - механизм произвольного расширения структуры контента (это, я думаю - необходимость). Сами поля не расширяют объект, а хранятся в отдельных таблицах.
5. Источники файлов - очень удобно, создаешь источник, указываешь ему путь (можно облако, напр. Amazon S3 или Dropbox), затем доп. полю типа "изображение" или "файл" указываешь источник файлов. Теперь при редактировании поля (изменении или добавлении файла) будет открываться указанный в источнике путь без возможности подняться на папку выше. -
Модификатор транслитерации в Smarty
Денис Ефремов Обновлен 9 лет назад в категории CMS Шаблоны 2
Мне понадобился для добавления css классов фильтрам. /core/smarty/rsplugins/modifier.translit.php
<?php
/**
* Модификатор транслит
*/
function smarty_modifier_translit($text)
{
$text = mb_strtolower($text);
$gost = array(
// Буквы
'а'=>'a',
'б'=>'b',
'в'=>'v',
'г'=>'g',
'д'=>'d',
'е'=>'e',
'ё'=>'yo',
'ж'=>'zh',
'з'=>'z',
'и'=>'i',
'й'=>'j',
'к'=>'k',
'л'=>'l',
'м'=>'m',
'н'=>'n',
'о'=>'o',
'п'=>'p',
'р'=>'r',
'с'=>'s',
'т'=>'t',
'у'=>'u',
'ф'=>'f',
'х'=>'h',
'ц'=>'c',
'ч'=>'ch',
'ш'=>'sh',
'щ'=>'shh',
'ъ'=>'j',
'ы'=>'y',
'ь'=>'',
'э'=>'e',
'ю'=>'yu',
'я'=>'ya',
// Всякие знаки препинания и пробелы
' '=>'-',
' - '=>'-',
'_'=>'-',
//Удаляем
'.'=>'',
':'=>'',
';'=>'',
','=>'',
'!'=>'',
'?'=>'',
'>'=>'',
'<'=>'',
'&'=>'',
'*'=>'',
'%'=>'',
'$'=>'',
'"'=>'',
'\''=>'',
'('=>'',
')'=>'',
'`'=>'',
'+'=>'',
'/'=>'',
'\\'=>'',
);
return strtr($text, $gost);
}
-
Добавить кнопку "Сохранить и закрыть" при редактировании товара
Денис Ефремов Обновлен 9 лет назад в категории CMS Админ. панель 2
При редактировании товара в админке (когда ты только создал товары и находишься на стадии первичного добавления характеристик и комплектаций) окно закрывается при сохранении изменений в любом случае, хотя это не всегда удобно. Я полагаю неплохо было бы добавить кнопку "сохранить и закрыть"(Hello Joomla))), а кнопке "сохранить" изменить действие на сохранение без закрытия модального окна редактирования товара.
Кода минимум, а эргономичность возрастет. -
Добавить hint с алиасом поля к лэйблам в админке.
Денис Ефремов Обновлен 9 лет назад в категории CMS Админ. панель 1
Во всех местах в админке, где добавляются данные, например при добавлении товара, сделать всплывающую подсказку с алиасом (именем переменной, в которой хранится значение), при наведении курсора на лэйбл поля.
В файле пример с полем description.