Сергей

Сергей

С нами с 17 июня 2015; Место в рейтинге пользователей: #461

Предложение по улучшении modstore.pro

Добрый день!
Вопрос я думаю адресован напрямую Василию.
Можно ли сделать так, чтобы после выхода новой версии компонента который куплен приходило сообщение об этом приходило на почту?
Заранее спасибо за ответ)
Сергей
25 июля 2017, 13:41
modx.pro
1
2 096
+4

Проблемы со спамом

Прошу помощи, так как не пойму в чём дело.
На сайте организованы несколько форм обратной связи.
Для примера приведу одну:
Сергей
16 октября 2016, 12:45
modx.pro
1 004
0

Ограничение голосования по IP для easyComm

Хотел разместить в Готовые решения — но не хватает рейтинга. ЛожуОставлю тут — если покажется нужным — прошу перенести куда следует.


У клиента система оценки товаров/услуг построена на компоненте — easyComm.
Из-за частых «неположительных» оценках было поручено мне создать нечто, что ограничит голосование на N-ое количество дней. Предмодерация не подошла (как заявили — «предмодерация — говорит о ложных отзывах».

Я создал «это» на основе нескольких подсмотренных в сети кусков. Самое главное что работает)

Не судите строго — первый опыт написания сниппетов.

Создал сниппет — voting_ban:
<?php
// очищаем кеш 
$id = $modx->resource->get('id');
$docObj = $modx->getObject('modResource',$id);// $docObj - объект ресурса, кеш которого надо почистить
$key = $docObj->getCacheKey(); 
$cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);

//Получаем IP посетителя
$ip = $_SERVER['REMOTE_ADDR'];
//Получаем ID текущего ресурса
$id = $modx->resource->get('id');

//текущая дата
$today =  date('Y-m-d');

// сколько дней нельзя голосовать
$day = (isset($day)) ? $day : '7';

//действие при разрешённом голосовании
$unlock = (isset($unlock)) ? $unlock : '';


//вычисляем ПЕРВУЮ дату в периоде в котором нельзя голосовать повторно (вторая дата - текущая дата)
$date = date('Y-m-d',strtotime("-$day day", strtotime(preg_replace('~^(\d+)\.(\d+)\.(\d+)$~', '$3-$2-$1', $today))));

// отбираем записи  IP всех голосовавших с датой публикации больше ПЕРВОЙ для текущего ресурса
$sql = "SELECT C.ip AS ip FROM modx_ec_messages C LEFT JOIN modx_ec_threads D ON C.thread=D.id AND C.date>'$date'
WHERE D.resource =".$id ;
$q = $modx->prepare($sql);
$q->execute(array(0));
$arr = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($arr as $arr_one) {
    $tmpip = $arr_one["ip"];
    $allip[] = $tmpip;
}
//сравниваем IP посетителя с полученными 
 if (in_array("$ip", $allip)) {
    //Действие если запрещено
}
else{
    //Действие если разрешено
    print $unlock;
}
Параметры:
&unlock — действие при разрешённом голосовании (я поставил вызов формы для голосования)
&day — Количество дней в течении которого нельзя повторно голосовать

Я использую так:
[[!voting_ban? &unlock=`[[!ecForm?]]` &day=`7`]]

Надеюсь кому нибудь пригодится)

ps. Если профессионалы найдут ошибки, либо просто подскажу как улучшить/сократить код — буду рад)

UPD:
Всё что делает сниппет можно было прочесть по комментариям в коде, но продублирую (по просьбе трудящихся)
1) Определяем IP посетителя,
2) На основании параметра &day (по умолчанию 7 дней) вычисляем период в течении которого запрещено голосовать
3) Получаем список IP которые участвовали в голосовании в данный период времени для данного ресурса
4) Сравниваем текущий IP с выборкой — если не находим — показываем форму для голосования &unlock
Сергей
03 сентября 2016, 06:24
modx.pro
1 183
0

Отзывы с оценкой товара - доработка сниппета

Тут Тыц в комментах указано решение. Сделал всё как описано — всё работает, за исключением подсчёта средней оценки.
Сниппет:
<?php
$sql = "SELECT C.properties AS prop FROM modx_tickets_comments C LEFT JOIN modx_tickets_threads D
ON C.thread=D.id WHERE D.resource = ".$id;
$q = $modx->prepare($sql);
$q->execute(array(0));
$arr = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($arr as $arr_one) {
    $tmp = json_decode($arr_one["prop"], true)["starrating"];
    $all[] = $tmp;
}
$middle = number_format(array_sum($all)/count($all), 1, '.', '' );
if (count($all) == 0) {
   $result = ""; 
} else {
$result = '<span itemprop="review" itemscope itemtype="http://data-vocabulary.org/Review-aggregate"><span class="stars"
 itemprop="rating">'.$middle.'</span>Рейтинг '.$middle.' на основе <span itemprop="count">'.count($arr).'</span> отзывов</span>';
}
$modx->setPlaceholders(array(
   'rating' => $result,
   'ratingCount' => "(".count($all).")"
));

отказывается работать — пишет что ошибка в 8 строке:

Parse error: syntax error, unexpected '[' in /core/cache/includes/elements/modsnippet/103.include.cache.php on line 8
Кто сможет помочь? Небольшое материальное вознаграждение гарантирую)
Сергей
25 августа 2016, 07:36
modx.pro
1
1 072
0

Ошибка при сохранении minishop2

Доброе время суток!
Прошу помощи. С недавнего времени при сохранении категории товаров появляется ошибка —

Процессор не найден: update

Решается всё довольно странным способом:

в файлах
	/core/cache/context_settings/web/context.cache.php
	/core/cache/scripts/elements/modplugin/3.cache.php
	/core/cache/includes/elements/modplugin/3.include.cache.php
	Надо менять
	MODx.modx23 = \'.(int)$modx23.\'
		на
	MODx.modx23 = 1
В чем может быть дело — ума не приложу.

версии:
Modx — 2.4.3
minishop — 2.2.0-pl2
php — 7.0.5
Сергей
04 июня 2016, 08:25
modx.pro
1 334
0