Константин Обухов

Константин Обухов

С нами с 03 марта 2016; Место в рейтинге пользователей: #333

[mSearch2] Версия 1.1.0-rc с улучшенным поиском

Спешу представить вам новую версию моего самого популярного платного дополнения для поиска и фильтрации в MODX — mSearch2.

Изменений очень много, и они очень серьёзные, особенно у поиска. Поэтому при установке этой версии таблицы с индексом создаются заново. Вам нужно будет полностью проиндексировать сайт сразу после обновления.

Самое главное изменение — это новый формат таблицы индекса. Раньше туда сохранялись только id ресурса, слово и его вес, согласно настроек сайта на момент индексирования. Если слово встречалось несколько раз на странице, то в индекс оно попадало только один раз, в порядке, указанном в системной настройке mse2_index_fields. Если вы меняли эту настройку, вам нужно было заново индексировать весь сайт.

А сейчас сохраняется id ресурса, слово, поле ресурса и сколько раз слово встретилось в этом поле. Таким образом, теперь вы можете указать, по каким полям ресурса искать, прямо в вызове сниппета параметром &fields=``.
[[!mSearch2?
	&fields=`pagetitle:5,comment:2,introtext:3`
]]
Более того, каждому полю вы можете указать вес, через двоеточие. Если параметр не заполнен, или у полей не проставлен вес, то берутся данные из системной настройки индексирования.
Василий Наумкин
13 августа 2014, 09:37
modx.pro
3
2 594
+7

AjaxSnippet и HitsPage (REVO)

Здравствуйте. Вопрос вот в чем:
На странице в боковой колонке был реализован вызов 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]]%} .....
Александр
30 июля 2014, 07:40
modx.pro
2
2 168
0

Новый тест скорости хостинга для MODX

Предлагаю новый простой тест хостинга, путем заполнения 10 000 INLINE чанков случайными значениями при помощи pdoTools.

Тест работает напрямую через 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.
Василий Наумкин
10 июля 2014, 10:07
modx.pro
13
22 334
+1

Вывод тегов товара

Привет.

Хочу на странице с товаром вывести все теги товара. Так, что бы по клику на тег получать все товары с этим тегом. В общем обычный функционал.
Попытался сделать вот так:
[[!tagLister? &tv=`ms_tags` ]]
Вроде как tagLister должен обрабатывать tv-параметры. Но тут он не работает… Можно конечно создать еще один tv, и писать теги товара в нем. Но не хочется лишнее поле делать.

Подскажите, правильно ли я вообще делаю? Или подскажите, может есть готовые сниппеты для задуманного. Программист из меня некудышний, а разобраться хочется)
Спасибо!
Андрей Сухомозгий
30 июня 2014, 17:42
modx.pro
3
5 505
0

Вывод в ms2gallery через &where несколько фото

Василий, или кто еще из людей сведущих, подскажите — как в мс2галлери вывести через &where несколько изображений, выбирая их по содержимому в description или name. Что-то вроде этого
{«description:LIKE»:"%678%", «OR:description:LIKE»:"%345%", «OR:description:LIKE»:"%123%"}
Только, чтобы работало :) Приведенный мной пример выбирает две фотографии и первую из них дублирует.

Заранее благодарен.
Wassi Wassinen
20 мая 2014, 12:23
modx.pro
3
1 576
-1

Выборка сниппетом товаров со своими условиями xpdo

Хочу сделать выбор ресурсов с классом msProduct и условием из таблицы ms2_products. Например вывести все товары с 'source' => '2'. Есть готовые решения в стиле pdoTools, но я его, к своему сожалению, пока не изучил и совсем не понимаю. Хочу сделать скрипт в стиле xPDO, что-то типа
<?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, но тоже мало врубился, в БД он в физическом виде не указан.
Александр Мелихов
08 мая 2014, 14:17
modx.pro
1
3 402
0

Нужна СЕО консультация по kino-govno.com


Насколько я знаю, у нас в сообществе есть пара людей, знакомых с поисковой оптимизацией.

Так вот, вопрос к ним (и не только) — что не так с индексацией kino-govno.com, почему настолько большая разница в переходах с Google и Яндекс? Вопрос, понятно, не о MODX, но спросить больше негде.

Для сравнения, вот другие сайты по той же тематике: раз и два. Доля Яндекса или больше, чем у Google, или на уровне.
Василий Наумкин
04 мая 2014, 02:18
modx.pro
4
7 986
0

Как начать участвовать в Open Source

Какое-то время назад я считал, что порог вхождения в OpenSource-разработку очень высок — ведь надо использовать git, отправлять пулл-реквесты. Это было чем-то незнакомым, далеким и останавливало меня. Тем более, что весь github.com на английском и многие слова и, соответственно, функции непонятны.

Однако сейчас я понимаю, как ошибался. Надеюсь, что после этой статьи вы согласитесь со мной и начнете вносить свой вклад в сообщество Open Source (и сообщество MODX в частности). Предлагаю на примере разобрать, как помочь разработчикам радовать нас дополнениями и уроками.
Илья Уткин
25 апреля 2014, 00:14
modx.pro
14
6 146
+9

Фильтрация TV параметров в MS2

при установке параметра в сниппете msProducts в такое значение
&tvFilters=`DATE(trade_day)==CURDATE()`
в запросы выходит
DATE(`TVtrade_day`.`value`) LIKE 'CURDATE()'
CURDATE() берется в кавычках, а надо без, как можно это обойти?
Можно ли это как то обойти через where запрос?
Dmitry Rodionov
18 апреля 2014, 12:24
modx.pro
1
1 775
0

Расширенные поля пользователей

Небольшая пошаговая инструкция, как научиться сохранять любые интересующие данные о юзере в специальное поле extended.

На самом деле, это никакой не секрет. Во многих объектах 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();
	}
}
Самое приятное, что эти данные вы можете не только просмотреть на странице пользователя, но и изменить.
Василий Наумкин
07 апреля 2014, 11:00
modx.pro
40
16 900
+11