Константин Обухов
С нами с 03 марта 2016; Место в рейтинге пользователей: #333[mSearch2] Версия 1.1.0-rc с улучшенным поиском
Спешу представить вам новую версию моего самого популярного платного дополнения для поиска и фильтрации в MODX — mSearch2.
Изменений очень много, и они очень серьёзные, особенно у поиска. Поэтому при установке этой версии таблицы с индексом создаются заново. Вам нужно будет полностью проиндексировать сайт сразу после обновления.
Самое главное изменение — это новый формат таблицы индекса. Раньше туда сохранялись только id ресурса, слово и его вес, согласно настроек сайта на момент индексирования. Если слово встречалось несколько раз на странице, то в индекс оно попадало только один раз, в порядке, указанном в системной настройке mse2_index_fields. Если вы меняли эту настройку, вам нужно было заново индексировать весь сайт.
А сейчас сохраняется id ресурса, слово, поле ресурса и сколько раз слово встретилось в этом поле. Таким образом, теперь вы можете указать, по каким полям ресурса искать, прямо в вызове сниппета параметром &fields=``.
Изменений очень много, и они очень серьёзные, особенно у поиска. Поэтому при установке этой версии таблицы с индексом создаются заново. Вам нужно будет полностью проиндексировать сайт сразу после обновления.
Самое главное изменение — это новый формат таблицы индекса. Раньше туда сохранялись только id ресурса, слово и его вес, согласно настроек сайта на момент индексирования. Если слово встречалось несколько раз на странице, то в индекс оно попадало только один раз, в порядке, указанном в системной настройке mse2_index_fields. Если вы меняли эту настройку, вам нужно было заново индексировать весь сайт.
А сейчас сохраняется id ресурса, слово, поле ресурса и сколько раз слово встретилось в этом поле. Таким образом, теперь вы можете указать, по каким полям ресурса искать, прямо в вызове сниппета параметром &fields=``.
[[!mSearch2?
&fields=`pagetitle:5,comment:2,introtext:3`
]]
Более того, каждому полю вы можете указать вес, через двоеточие. Если параметр не заполнен, или у полей не проставлен вес, то берутся данные из системной настройки индексирования. AjaxSnippet и HitsPage (REVO)
Здравствуйте. Вопрос вот в чем:
На странице в боковой колонке был реализован вызов getResources для отображения списка самых просматриваемых тем. Решил выводить через AjaxSnippet, но после выполнения сниппета не отрабатывает {%hp-[[+id]]%}. Вернее не отрабатывает сниппет HPCount, так как пользователю выводится {%hp-123%}. Вероятно нет инициализации HPCount вызываемом в футере. Может кто посоветует как выйти из этой ситуации?
На странице в боковой колонке был реализован вызов getResources для отображения списка самых просматриваемых тем. Решил выводить через AjaxSnippet, но после выполнения сниппета не отрабатывает {%hp-[[+id]]%}. Вернее не отрабатывает сниппет HPCount, так как пользователю выводится {%hp-123%}. Вероятно нет инициализации HPCount вызываемом в футере. Может кто посоветует как выйти из этой ситуации?
[[AjaxSnippet?
&snippet=`getResources`
&parents=`.....`
&tpl=`rating-lst`
&showHidden=`0`
&includeTVs=`LikeDislike`
&tvPrefix=``
&sortbyTVType=`integer`
&sortbyTV=`LikeDislike`
&limit=`5`
&as_mode=`onload`
]]
чанк rating-lst.... Просмотров: {%hp-[[+id]]%} .....
Новый тест скорости хостинга для MODX
Предлагаю новый простой тест хостинга, путем заполнения 10 000 INLINE чанков случайными значениями при помощи pdoTools.
Тест работает напрямую через MODX_API_MODE. Никакой лишней нагрузки нет, чистый рендер по всем правилам.
На нашем хостинге тест показывает примерно такие цифры:
Код нужно скопипастить в файл /render.php, который вы создадите прямо в корне сайта. Потом вызываете файл из браузера и смотрите цифры.
Пишите в комментариях, что у вас получается. Желательно также указать, какой у вас хостинг, и сколько платите в месяц — мне очень интересно.
Готовая таблица с упорядоченными данными из комментариев к этой заметке.
Тест работает напрямую через MODX_API_MODE. Никакой лишней нагрузки нет, чистый рендер по всем правилам.
На нашем хостинге тест показывает примерно такие цифры:
0.0002420: Created inline chunk 0.0749481: Total time 3 145 728: Memory usageТестовый скрипт:
<?php
define('MODX_API_MODE', true);
require 'index.php';
$pdo = $modx->getService('pdoTools');
$tpl = '@INLINE <p>[[+val1]] - [[+val2]] - [[+val3]]</p>';
$output = '';
for ($i = 0; $i <= 10000; $i ++) {
$array = array('val1' => rand(), 'val2' => rand(), 'val3' => rand());
$output .= $pdo->getChunk($tpl, $array);
}
echo '<pre>'; print_r($pdo->getTime()); echo '</pre>';
echo $output;
Код нужно скопипастить в файл /render.php, который вы создадите прямо в корне сайта. Потом вызываете файл из браузера и смотрите цифры.
Пишите в комментариях, что у вас получается. Желательно также указать, какой у вас хостинг, и сколько платите в месяц — мне очень интересно.
Готовая таблица с упорядоченными данными из комментариев к этой заметке.
Обновлено 25.04.2016
Добавили PHP 7.0 на modhost.pro. Вот тест скорости для него:0.0001070: Created inline chunk with name "d9ad1bcdc5a530ed83598e35a1357e51" 0.0328310: Total time 2 097 152: Memory usageМинимум в 2 раза быстрее чем PHP 5.
Вывод тегов товара
Привет.
Хочу на странице с товаром вывести все теги товара. Так, что бы по клику на тег получать все товары с этим тегом. В общем обычный функционал.
Попытался сделать вот так:
Подскажите, правильно ли я вообще делаю? Или подскажите, может есть готовые сниппеты для задуманного. Программист из меня некудышний, а разобраться хочется)
Спасибо!
Хочу на странице с товаром вывести все теги товара. Так, что бы по клику на тег получать все товары с этим тегом. В общем обычный функционал.
Попытался сделать вот так:
[[!tagLister? &tv=`ms_tags` ]]
Вроде как tagLister должен обрабатывать tv-параметры. Но тут он не работает… Можно конечно создать еще один tv, и писать теги товара в нем. Но не хочется лишнее поле делать.Подскажите, правильно ли я вообще делаю? Или подскажите, может есть готовые сниппеты для задуманного. Программист из меня некудышний, а разобраться хочется)
Спасибо!
Вывод в ms2gallery через &where несколько фото
Василий, или кто еще из людей сведущих, подскажите — как в мс2галлери вывести через &where несколько изображений, выбирая их по содержимому в description или name. Что-то вроде этого
Заранее благодарен.
{«description:LIKE»:"%678%", «OR:description:LIKE»:"%345%", «OR:description:LIKE»:"%123%"}
Только, чтобы работало :) Приведенный мной пример выбирает две фотографии и первую из них дублирует.Заранее благодарен.
Выборка сниппетом товаров со своими условиями xpdo
Хочу сделать выбор ресурсов с классом msProduct и условием из таблицы ms2_products. Например вывести все товары с 'source' => '2'. Есть готовые решения в стиле pdoTools, но я его, к своему сожалению, пока не изучил и совсем не понимаю. Хочу сделать скрипт в стиле xPDO, что-то типа
Читал что-то про класс msProductData, но тоже мало врубился, в БД он в физическом виде не указан.
<?php
$q = $modx->newQuery('msProduct');
$q->where(array('source' => '2'));
$col = $modx->getCollection('msProduct', $q);
foreach ($col as $item){
print $item->get('id').'<br />';
}
Но по данному шаблону работают только условия из таблицы site_content. Как правильно приджоинить таблицу в стиле xPDO, чтобы сделать подобную выборку?Читал что-то про класс msProductData, но тоже мало врубился, в БД он в физическом виде не указан.
Нужна СЕО консультация по kino-govno.com
Насколько я знаю, у нас в сообществе есть пара людей, знакомых с поисковой оптимизацией.
Так вот, вопрос к ним (и не только) — что не так с индексацией kino-govno.com, почему настолько большая разница в переходах с Google и Яндекс? Вопрос, понятно, не о MODX, но спросить больше негде.
Для сравнения, вот другие сайты по той же тематике: раз и два. Доля Яндекса или больше, чем у Google, или на уровне.
Как начать участвовать в Open Source
Какое-то время назад я считал, что порог вхождения в OpenSource-разработку очень высок — ведь надо использовать git, отправлять пулл-реквесты. Это было чем-то незнакомым, далеким и останавливало меня. Тем более, что весь github.com на английском и многие слова и, соответственно, функции непонятны.
Однако сейчас я понимаю, как ошибался. Надеюсь, что после этой статьи вы согласитесь со мной и начнете вносить свой вклад в сообщество Open Source (и сообщество MODX в частности). Предлагаю на примере разобрать, как помочь разработчикам радовать нас дополнениями и уроками.
Однако сейчас я понимаю, как ошибался. Надеюсь, что после этой статьи вы согласитесь со мной и начнете вносить свой вклад в сообщество Open Source (и сообщество MODX в частности). Предлагаю на примере разобрать, как помочь разработчикам радовать нас дополнениями и уроками.
Фильтрация TV параметров в MS2
при установке параметра в сниппете msProducts в такое значение
Можно ли это как то обойти через where запрос?
&tvFilters=`DATE(trade_day)==CURDATE()`
в запросы выходитDATE(`TVtrade_day`.`value`) LIKE 'CURDATE()'
CURDATE() берется в кавычках, а надо без, как можно это обойти?Можно ли это как то обойти через where запрос?
Расширенные поля пользователей
Небольшая пошаговая инструкция, как научиться сохранять любые интересующие данные о юзере в специальное поле extended.
На самом деле, это никакой не секрет. Во многих объектах MODX есть специальное поле типа JSON, которое хранится в БД как текст, например, properties у modResource и extended у modUserProfile.
При работе с объектами xPDO, JSON текст из этих полей превращается в массивы. То есть, общий принцип выглядит так:
На самом деле, это никакой не секрет. Во многих объектах MODX есть специальное поле типа JSON, которое хранится в БД как текст, например, properties у modResource и extended у modUserProfile.
При работе с объектами xPDO, JSON текст из этих полей превращается в массивы. То есть, общий принцип выглядит так:
// id нужного пользователя
$user_id = 15;
// Получаем объект modUser
if ($user = $modx->getObject('modUser', $user_id)) {
// Получаем связанный с ним профиль пользователя
if ($profile = $user->getOne('Profile')) {
// Получаем специальное поле extended
$extended = $profile->get('extended');
// Добавляем новое значение
$extended['mykey'] = 'mydata';
// И сохраняем обратно в профиль
$profile->set('extended', $extended);
$profile->save();
}
}
Самое приятное, что эти данные вы можете не только просмотреть на странице пользователя, но и изменить.