06 февраля 2017, 20:55 Подытожу, сниппет ages с выводом текста: <?php $cases = array(2, 0, 1, 1, 1, 2); $titles = array('год', 'года', 'лет'); $age = DateTime::createFromFormat('Y-m-d H:i:s', $input) ->diff(new DateTime('now')) ->y; $title = $titles[($age % 100 > 4 && $age % 100 < 20) ? 2 : $cases[min($age % 10, 5)]]; return $age . " " . $title;и вызов [[+tv.birthday:ages]] Вопросы / Возраст человека 20 0
06 февраля 2017, 20:18 А в панели разработчика на вкладке «Network» есть галочка «Disable cache» — используйте во время разработки Вопросы / CSS 7 +3
06 февраля 2017, 11:23 загляните в консоль — у вас какой то скрипт Modernizr требует, а он не подключен Вопросы / Не добавляется в корзину minishop2 товар 6 0
06 февраля 2017, 10:20 [[+tv.birthday:ages]] [[+tv.birthday:ages: имя_сниппета]] Вопросы / Возраст человека 20 0
06 февраля 2017, 01:38 Во первых, для диагностики отключите сжатие скриптов, во вторых — попробуйте подключить версию jquery в районе <3 (2.2, 1.12). Сам пробовал 3-ю версию — были баги. И посмотрите в консоль. Вопросы / Не добавляется в корзину minishop2 товар 6 0
06 февраля 2017, 01:27 Что именно странного? Человек спросил, ему ответили ссылкой на платный компонент… Если человек работает на заказе клиента — 90% цена обговорена заранее и вряд ли будет изменена. Из своего опыта: — нужен личный кабинет — предлагаю Office (естественно цену на него), цитата: а зачем нужен Office? есть же LoginОбъясняю, что потребуется дополнительно столько то времени и денег, объясняю, что дешевле взять Office и настроить. В итоге делал велосипеды на Login. — Нужны скидки для minishop2 — на выбор Discontrol / msDiscount. «Знающий» со стороны клиента подсказывает — используй модификатор цены. Мне то не проблема это сделать — только оплачено должно быть, НО — Discontrol стоит 990р, msDiscount 1490р, а велосипед получается и дороже и менее понятен для управления. — Нужна была бонусная программа — уговорил на msBonus… Вот тут, правда, лучше бы сам написал — очень много времени пришлось потратить на исправление косяков (не откажешься же, когда компонент уже куплен). И это из самого ближайшего. Иван, а что именно вы не поняли? Почему я предложил это решение или само решение? Вопросы / Как в MODX загрузить несколько изображений к ресур 5 +1
06 февраля 2017, 00:05 Забыл написать — CreateGalleryAlbum нужно еще подписать на событие OnResourceDuplicate. Что то меня минусанули — что не так — ребята, объясните? Вопросы / Как в MODX загрузить несколько изображений к ресур 5 0
05 февраля 2017, 23:21 Клиенты не всегда любят платные компоненты, всегда просят альтернативу (это похоже у них какая то психологическая составляющая — за альтернативу подчас платят дороже). На последнем проекте использовал Gallery + инструкцию отсюда. В ней есть правда косяки: — при дубликате ресурса (клиенты очень любят это делать) — новый ресурс привязан к галереи оригинала — если удалена галерея ресурса, то косяк с сохранением. Исправления (приведу полный код): Плагин CreateGalleryAlbum: <?php switch ($modx->event->name) { case 'OnDocFormSave': $GalleryProcessorPath = $modx->getOption('gallery.core_path',$config,$modx->getOption('core_path').'components/gallery/').'processors/'; $options = array('processors_path'=>$GalleryProcessorPath); $galleryName = $resource->get('pagetitle'); //Получаем все TV текущего ресурса $tvs = $resource->getTemplateVars(); foreach($tvs as $tv) { //нам нужны только TV с типом galleryalbumview if ($tv->get('type')=='galleryalbumview') { $createalbum = false; $tvvalue = $tv->getValue($id); if(!empty($tvvalue)){ $resp = $modx->runProcessor('mgr/album/get',array('id'=>$tvvalue),$options); if (!$resp->isError()) { $album = $resp->getObject(); if(!empty($album)){ $album['name'] = $galleryName; $modx->runProcessor('mgr/album/update',$album,$options); }else{ $createalbum = true; } }else{ $createalbum = true; } }else{ $createalbum = true; } if ($createalbum) { $tv_prop = $tv->get('properties'); $album = array( 'name' => $galleryName, 'parent' => isset($tv_prop['galParentId']['value'])?$tv_prop['galParentId']['value']:0, 'description' => '', 'active' => 1, 'prominent' => 0 ); $resp = $modx->runProcessor('mgr/album/create',$album,$options); if (!$resp->isError()) { $album = $resp->getObject(); $tv->setValue($id,$album['id']); $tv->save(); } } } } case 'OnResourceDuplicate': if(isset($newResource) && isset($oldResource)){ $tvs = $newResource->getTemplateVars(); $new_id = $newResource->get("id"); $old_id = $oldResource->get("id"); $GalleryProcessorPath = $modx->getOption('gallery.core_path',$config,$modx->getOption('core_path').'components/gallery/').'processors/'; $options = array('processors_path'=>$GalleryProcessorPath); $pagetitle = $newResource->get('pagetitle'); $i = 1; if(preg_match("/\s[\d]+$/i", $pagetitle, $m)){ $i = intval(trim($m[0])) + 1; $pagetitle = preg_replace("/\s[\d]+$/i", " " . $i, $pagetitle); }else{ $pagetitle .= " " . $i; } $newResource->set("pagetitle", $pagetitle); $galleryName = $pagetitle; foreach($tvs as $tv) { if ($tv->get('type')=='galleryalbumview') { $new_value = $tv->getValue($new_id); $old_value = $tv->getValue($old_id); if($old_value == $new_value){ $tv_prop = $tv->get('properties'); $album = array( 'name' => $galleryName, 'parent' => isset($tv_prop['galParentId']['value'])?$tv_prop['galParentId']['value']:0, 'description' => '', 'active' => 1, 'prominent' => 0 ); $resp = $modx->runProcessor('mgr/album/create',$album,$options); if (!$resp->isError()) { $album = $resp->getObject(); $tv->setValue($new_id,$album['id']); $tv->save(); } } } } } break; } Файл core/components/gallery/elements/tv/input/galleryalbumview.class.php <?php class GalleryAlbumViewInputRender extends modTemplateVarInputRender { public function getTemplate() { if(!empty($this->tv->value)){ $options = array('processors_path'=>$this->modx->getOption('core_path').'components/gallery/'.'processors/'); if($this->modx->runProcessor('mgr/album/get',array('id'=>$this->tv->value),$options)->isError()){ $this->tv->value = ""; } } return $this->modx->getOption('gallery.core_path',null, $this->modx->getOption('core_path').'components/gallery/').'elements/tv/galleryalbumview.input.tpl'; } } return 'GalleryAlbumViewInputRender'; Вопросы / Как в MODX загрузить несколько изображений к ресур 5 0 1
05 февраля 2017, 22:55 да, но чтобы при каждом вызове страницы менялся вывод — сделайте вызов некешированным (в начале !): [[!pdoResources? &limit=`7` &parents=`47` &depth=`0` &sortby=`RAND()` &tpl=`arena_item` &includeTVs=`images` ]] Вопросы / Как пронумеровать выводимые чанки? 17 +1
05 февраля 2017, 22:51 pdoResources sortby Для случайно сортировки укажите «RAND()»вы это имели ввиду? Вопросы / Как пронумеровать выводимые чанки? 17 0
05 февраля 2017, 22:48 Изучите фильтры phx, а лучше переходите на fenom Вопросы / Как пронумеровать выводимые чанки? 17 0
05 февраля 2017, 22:46 До 10: [[+idx:lt=`10`:then=`0[[+idx]]`:else=`[[+idx]]`]]попробуйте, должно сработать Вопросы / Как пронумеровать выводимые чанки? 17 +1
05 февраля 2017, 22:40 В чанке, там, где нужен номер [[+idx]] (или на fenom {$idx}) — нумерация идет от 1, чтобы в начале были 0: [[+idx:lt=`100`:then=`[[+idx:lt=`10`:then=`00[[+idx]]`:else=`0[[+idx]]`]]`:else=`[[+idx]]`]]тут до 1000 Вопросы / Как пронумеровать выводимые чанки? 17 0
05 февраля 2017, 19:54 Еще можете попробовать переписать tpl и tplWrapper на fenom, должно прилично ускорить. Вопросы / Sitemap генерируется 414 секунд. 12 0
05 февраля 2017, 19:35 Вариант с жестким кешированием на день/несколько дней не подойдет? Генерируете по крону в файл, на странице sitemap.xml сниппет с примерным содержанием: <?php return file_get_contents('pach_to_file'); Вопросы / Sitemap генерируется 414 секунд. 12 +1
05 февраля 2017, 19:25 Пишите в файл номер запуска, при запуске скрипта считывайте, как только $docs будет пустой (как вариант, количество меньше 200) — в файл пишите 0 и так по кругу, ваш offset будет номер запуска*200. Чтобы снизить нагрузкуИспользуйте PDO вместо xPDO. Если вам значение именно в 1 надо — два запроса — select — получить id ресурсов с нужными шаблонами, update — обновить значение. А если этот тв используется только у этих шаблонов, так и id ресурсов получать не обязательно. Вопросы / Обновить TV-поле 2 0
05 февраля 2017, 16:34 Надо будет попробовать. Оказывается есть ResizeImageOnUpload — в описании DirectResize2 ссылочка на него! Не знал, попробовал — работает. Вопросы / Решение для ресайза картинок при загрузке? 3 0
29 января 2017, 09:36 Похоже это баг firefox — не срабатывает live submit (а может не только live и не только submit, не проверял), если у парента: transform-style: preserve-3d;В общем, уберите у .buttons это свойство (и с ним связанные) и все заработает, а уменьшение при нажатие попробуете сделать не через z-трансляцию, а через scale. Вопросы / miniShop2 не добавляет товар в корзину Firefox 7 0
Gallery3x 3.4.0 - вставка галерей прямо из визуального редактора (CKEditor и TinyMCE RTE) Здравствуйте. Есть консольный скрипт Вот почитайте: docs.ivan345.com/books/gallery3x/page/import-ms2galleryphp
[mSync] Новая версия синхронизации с 1С Всем привет. В какой то момент начали сыпаться ошибки: Error 23000 executing statement: INSERT INTO `modx_msync_products` (`product_id`, `uuid_1c`) VALUES ...
Checkbox для модального окна Они не отключены, они платные, чтобы писали только те, кому действительно очень надо. Когда бесплатно люди начинают думать, что я им должен.
[SendIt 2.6.0] Анализ поведения пользователя для защиты от спама (невидимая капча)... Здравствуйте. Делаю личный кабинет на Sendit и со сбросом пароля возникли проблемы. Можете подсказать, в чем ошибка? Список вопросов в одноименном разделе на modx.pro пока пуст, и,...
Minishop + честный знак (продажа маркированной продукции) В нашем случае мы решили убрать всю логику по маркировке сайта.
MiniShop3 - Не выводятся товары дополнительных категорий @SYAN ваша указанная проблема исправлена еще до версии 1.2.3 @Павлик Мышкин завел: github.com/modx-pro/MiniShop3/issues/480 github.com/modx-pro/MiniShop3/issues/481Исправим в б...
MobileDetect 2.0.0-pl функция "планшеты как стандартные браузеры не работает" в 2.1.0-pl баг исправлен
и вызов [[+tv.birthday:ages]]
Сам пробовал 3-ю версию — были баги. И посмотрите в консоль.
— нужен личный кабинет — предлагаю Office (естественно цену на него), цитата:
Объясняю, что потребуется дополнительно столько то времени и денег, объясняю, что дешевле взять Office и настроить. В итоге делал велосипеды на Login.
— Нужны скидки для minishop2 — на выбор Discontrol / msDiscount. «Знающий» со стороны клиента подсказывает — используй модификатор цены. Мне то не проблема это сделать — только оплачено должно быть, НО — Discontrol стоит 990р, msDiscount 1490р, а велосипед получается и дороже и менее понятен для управления.
— Нужна была бонусная программа — уговорил на msBonus… Вот тут, правда, лучше бы сам написал — очень много времени пришлось потратить на исправление косяков (не откажешься же, когда компонент уже куплен).
И это из самого ближайшего.
Иван, а что именно вы не поняли? Почему я предложил это решение или само решение?
Что то меня минусанули — что не так — ребята, объясните?
— при дубликате ресурса (клиенты очень любят это делать) — новый ресурс привязан к галереи оригинала
— если удалена галерея ресурса, то косяк с сохранением.
Исправления (приведу полный код):
Плагин CreateGalleryAlbum:
Файл core/components/gallery/elements/tv/input/galleryalbumview.class.php
вы это имели ввиду?
попробуйте, должно сработать
тут до 1000
Генерируете по крону в файл, на странице sitemap.xml сниппет с примерным содержанием:
Используйте PDO вместо xPDO. Если вам значение именно в 1 надо — два запроса — select — получить id ресурсов с нужными шаблонами, update — обновить значение. А если этот тв используется только у этих шаблонов, так и id ресурсов получать не обязательно.
Оказывается есть ResizeImageOnUpload — в описании DirectResize2 ссылочка на него! Не знал, попробовал — работает.
В общем, уберите у .buttons это свойство (и с ним связанные) и все заработает, а уменьшение при нажатие попробуете сделать не через z-трансляцию, а через scale.