Пробуйте не inputTVtype задавать, а создать отдельную ТВшку-список, там все задать, а в миге указать inputTV.
Всем привет!
Понадобилось мне быстро соорудить что-то, с помощью чего можно было бы админить галерею типа этой.
Создал TV типа migx, прописал в нем конфиги и — помимо всего остального — понадобилось в описании вкладок формы прикрепить дополнительный инпут типа «listbox-multiple» (множественный выбор), точнее, создать с помощью «inputTVtype», указав нужный «inputOptionValues». Этот TV нужен, чтобы прикреплять к дивам выбранное манагером значение атрибута, чтобы сортировать дивы по категориям.
Всё прекрасно работает, в чанке выводится, но… не получается задать разделитель для вывода TV. А без этого значения атрибута, если заданы несколько, выводятся подряд — вплотную друг к другу — без пробела.
Если бы я создавал обычный TV, тогда было бы всё понятно — в настройках есть поле, где указывается разделитель. А как в таком случае поступить, не подскажете? Быть может, есть стандартный для json способ дописать параметр? Честно, почти день убил — не нашел ничего…
Вот сами конфиги tv migx:
1.Вкладки формы:
[{ "caption": "Item", "fields": [{ "field": "title", "caption": "Title" }, { "field": "description", "caption": "Description", "inputTVtype": "textarea" }, { "field": "link", "caption": "Link" }, { "field": "image", "caption": "Image", "inputTVtype": "image" }, { "field": "listing", "caption": "listing", "inputTVtype": "listbox-multiple", "inputOptionValues": "CLASSIC==.branding||ELITE==.design||EFFECT==.photography||BACKLIGHT==.videography" }] }]
2.Разметка колонок(хотя, наверно, это уже лишнее):
[{ "header": "Title", "sortable": "true", "dataIndex": "title" }, { "header": "Description", "sortable": "true", "dataIndex": "description" }, { "header": "Link", "sortable": "false", "dataIndex": "link" }, { "header": "Image", "sortable": "false", "dataIndex": "image", "renderer": "this.renderImage" }, { "header": "listing", "sortable": "false", "dataIndex": "listing" }]
ЗЫ: Создать отдельный TV с типом «listbox-multiple» и прикрепить его к migx TV не предлагать!)))
Всем заранее спасибо!
Обновляю сторонний магазин до последней версии, и решил сразу же перенести цены из таблицы данных товаров непосредственно в таблицу документов (в новой версии движка мы отказались от CRC). В целом SQL-запрос не сложный:
UPDATE `modx_site_content` JOIN `modx_shopmodx_products` `Product` ON `modx_site_content`.`id` = `Product`.`resource_id` SET `price` = Product.sm_price
На xPDO это получается примерно вот так:
$q = $modx->newQuery('modResource'); $q->command('update'); $q->innerJoin('ShopmodxProduct', "Product"); $q->set(array( "price" => "Product.sm_price", )); $s = $q->prepare(); print $q->toSQL(); // $s->execute();
Но если выполнить такой код, то мы получим вот такой запрос:
UPDATE `modx_site_content` JOIN `modx_shopmodx_products` `Product` ON `modx_site_content`.`id` = `Product`.`resource_id` SET `price` = 0
Почему так получается? Потому что xPDO рассчитан на обновление только текущей таблицы и ждет на вход только четкие значения, и эти значения он пытается привести к конечному виду в зависимости от типа данных. Для поля price тип данных — int, вот он и пытается строку «Product.sm_price» привести к интовому с логичным результатом — 0. Причем даже если мы заставим его понять, что это строка, в лучшем случае мы получим результат SET `price` = 'Product.sm_price', то есть он попытается присвоить не значение колонки sm_price, а просто строковое значение, которое мускул все равно приведет к нулю.
Не буду сильно лезть в дебри, а сразу решение приведу:
$q = $modx->newQuery('modResource'); $q->command('update'); $q->innerJoin('ShopmodxProduct', "Product"); $q->query['set']["price"] = array( "value" => "Product.sm_price", "type" => false, ); $s = $q->prepare(); print $q->toSQL(); // $s->execute();
Здесь мы сразу в объект запроса подставляем set-поля с указанием типа данных, точнее указывая нулевой тип. xPDO в данном случае просто не пытается ничего экранировать и тогда мы на выходе получаем нормальный запрос с названием колонки.
Сегодня выпустил обновленную сборку исправленной очисткой корзины и прочими мелочами. Собственно, такие обновления сейчас довольно часто будут появляться, и здесь возникает вопрос: а как же обновлять уже работающие магазины на базе ShopModxBox, если эта сборка ставится только на чистый MODX-сайт? Возрадуйтесь! Теперь это стало делать значительно легче :) Теперь с каждым новым релизом ShopModxBox будет выходить и ShopModxBoxPatch, в который будет упаковываться все то, что не идет в отдельных пакетах, а что касается только самой сборки. В нашем случае пока это только смарти и паблик шаблоны. Само же ядро магазина полностью перешло в пакеты shopModx и modxSite. Таким образом, чтобы обновить ShopModxBox-3+, устанавливаем свежие modxSite, shopModx и ShopModxBoxPatch, сбрасываем кеш. Всё :)
Здесь важные замечания: 1. Не забываем делать бэкапы! 2. Такое обновление нормально пройдет, если вы правильно расширяете базовые shopmodx-шаблоны. Но если вы свое пишете непосредственно в базовые шаблоны, то патч устанавливать нельзя вам, он затрет ваши изменения. Обращайтесь тогда к нам за помощью в обновлении.
На платных серверах кэш смогу настроить? ну скажем nic.ru, reg.ru, timeweb.ru итд.?
За всех не скажу, но скорее всего да.
если да, почему бы сразу в пост не прописать как это делается?
Погуглите. Я гуглил и вы погуглите.
А поля на акцию надо обязательно, все таки у вас теперь платный «продукт», который должен работать из коробки =)
Ну, пока вы не купили, вам я не обязан пока ничего срочно дорабатывать. Так что или покупать и требовать (в рамках бюджета) или подождать когда появится.
Все по делу, спасибо за ответ!
Хоршо если на слово «проще», нужно дорабатывать, согласен, с поиском морфологическим проблем больше чем кажеться. Я бы даже сказал бездонная работа которую всегда можно улучшать и лучшать.
На платных серверах кэш смогу настроить? ну скажем nic.ru, reg.ru, timeweb.ru итд.? если да, почему бы сразу в пост не прописать как это делается?
А поля на акцию надо обязательно, все таки у вас теперь платный «продукт», который должен работать из коробки =)
PS. не обращайте внимания на грамматические и пунктационные ошибки.
Как можно такой поиск делать на сайте? ищу слово «просто» он выдает в поиск товары со словами «просмотры»
Не «просмотры» выдает, а «проще». Можете поверить на слово, я перепроверил. И это гораздо больше, чем ничего (это к вопросу «зачем»). Хотя да, есть еще что улучшать. И будем улучшать обязательно. А вот не делать и не улучшать — это топтаться на месте.
зачем он мне нужен на моих платных серверах? Что бы он всегда обращался и инициализировал modx?
Настройте кеширование сервера сами, и не будет дергать каждый раз MODX. У нас не дергает.
Только для вас и ваших серверов, да я знаю про вашу технологию «пупет», но сколько человек ею пользуется?
Пользуемся мы и наши клиенты. Пока не много. Будет больше обязательно.
А скидки? оказывается мне еще процедуру как обычному обывателю надо писать? ладно я знаю как это все устроено, а обычные новички?
Сейчас да. Чуть позже будут простые настройки.
конечно же должны тратить монетки)))
Да, и это нормальная практика. Можете сами — не придется тратиться. Не можете — надо платить. Я вам тайну открою: я ни для кого бесплатно ничего не делаю. Раньше вот делился наработками бесплатно, но не делал бесплатно, если вы разницу улавливаете.
ну и на последок, у вас на демо сайте корзина не очищается.
Спасибо за багрепорт, вечером выпущу патч.
Спасибо, я уже разобрался: нужно было изменить connectors path в админке в источнике файлов connectors.
Мне кажетс, что вы топчитесь на месте… Как можно такой поиск делать на сайте? ищу слово «просто» он выдает в поиск товары со словами «просмотры», то есть то, что ты ищешь по факту может быть в самом конце. Зачем он нужен такой?
«Фишечка с постоянными ссылками к картинкам» — зачем? зачем он мне нужен на моих платных серверах? Что бы он всегда обращался и инициализировал modx? эта фишка Только для вас и ваших серверов, да я знаю про вашу технологию «пупет», но сколько человек ею пользуется?
А скидки? оказывается мне еще процедуру как обычному обывателю надо писать? ладно я знаю как это все устроено, а обычные новички? конечно же должны тратить монетки)))
ну и на последок, у вас на демо сайте корзина не очищается.
в config.core.php ищем строку где присваивается значение переменной $modx_processors_path и меняем на соответствующее текущему серверу, или же на значение $modx_processors_path = $_SERVER['DOCUMENT_ROOT'].'/core/model/modx/processors/';