Дмитрий

Дмитрий

С нами с 16 декабря 2015; Место в рейтинге пользователей: #47
Дмитрий
25 марта 2017, 11:18
+1
Можно это дело написать самому.
Все завязано на событиях minishop2. По нажатию на кнопку купить срабатывает событие cart/add, по нему вы вызываете модальное окно или что там еще, в нем появляется корзина, которую вы оформляете как вам надо и все.
Дмитрий
23 марта 2017, 09:29
1
+1
Была такая проблема год назад. Но как решил — не помню.
Дмитрий
22 марта 2017, 12:50
0
Какая-то ошибка в английской версии:
Дмитрий
21 марта 2017, 01:24
+1
А я свой первый (как звучит!) mSearch2 скачал еще больше 2 лет назад, с какого-то дырявого сайта, но это не сделало меня умнее :(
ну, тут уже проблемы индейцев, вождя, как говорится, не того

Документация сейчас достаточно описана по всем параметрам, и чего действительно может быть не достаточно, это как сделать свой класс фильтрации. Но, тут уже проблема квалификации разработчика. Ну, на самом деле, вопрос квалификации вообще касается всех более-менее сложных модулей. Если вы за два года не ушли дальше настройки модуля по документации, то я даже не знаю, что сказать. Я не говорю, что я прям великий молодец, если почитать некоторые мои посты с вопросами о помощи, может сложится совсем иное впечатление. Да вот только с Revo я работаю всего полтора года.
Дмитрий
21 марта 2017, 01:06
0
В общем, вариант с консолью не прокатил, ибо скрипт виснет на 30-ти секундах выполнения, а исправить я не смог, хотя Николай Ланец здесь рассказывал об этой проблеме. Но решить я ее сам не смог. Тупо не понял, где конфиг менять.
Так вот. Я таки установил модуль еще на пару хостингов с тестовыми данными (никакого пиратства) и прогнал еще разок. Убедился, что такая проблема возникает только у хостера FastVPS и достал их поддержку основательно. После 4 часов работы поддержки, мне предложили вариант запускать скрипт из версии PHP 5.4, ибо так работает, или попробовать обновить phpThumb.
Далее самое интересное. Я честно думал о таком варианте, что класс phpThumb где-то косячит, но полагал, что раз уж MODX 2.5.5 установлен, то и phpThumb должен быть свежим. Но, я ошибался. Скачал с GitHub новую версию библиотеки, залил на сайт и вуа-ля. Все работает! Даже не пришлось PHP 5.4 в консоли переключать
Дмитрий
21 марта 2017, 00:54
+5
Например, я купил приложение, все хорошо работало, а через 12 месяцев я захотел что-то поправить, почему я должен за это еще раз платить, если я вообще не пользовался техподдержкой?
За 12 месяцев, как правило, все модули и сама CMS значительно обновляются. Да и скорее всего, если вы действительно поддерживаете сайт, то за год самостоятельно разберетесь во всех тонкостях работы того или иного модуля. Свой первый (как звучит!) mSearch2 я купил в сентябре прошлого года. Сейчас март, и я настраиваю его уже не мучая Василия своими идиотскими вопросами. Считаю, что годовая поддержка модуля — мера, более чем достаточная.
Дмитрий
20 марта 2017, 22:28
0
Можете сами написать. Это не сложно.
Дмитрий
20 марта 2017, 18:43
0
очень криворукий вариант, который можно сделать куда лучше, банально приделав чанки, а не вывод сразу в html, чего делать вообще нельзя.
Сниппет:
<?php
$contexts = $modx->getCollection('modContext', array('key:!=' => 'mgr'));
$html .= '';
foreach($contexts as $context) {
$html .= '<a href=«Адрес-страницы.html?context=»'.$context->key.'">';
}
return $html;

Плагин:
<?php
if ($modx->event->name != 'OnHandleRequest' || $modx->context->key == 'mgr') {return;}
if (isset($_GET['context'])){
    $modx->switchContext($_GET['context']);
}
Плагин вешается на событие OnHandleRequest
Это все очень по-простому описано, лишь базовые вещи. Это все нужно доработать и улучшить. Я тут скорее, вектор направления задал.
Дмитрий
20 марта 2017, 16:07
0
У mFilter есть js события, и на них можно повесить всякие свистюльки
Дмитрий
20 марта 2017, 16:05
0
Чуть позже смогу помочь, сейчас вообще с телефона сижу
Дмитрий
20 марта 2017, 15:30
0
1. Выбор контекста можно сделать своим сниппетом и плагином, я полагаю. То есть, сниппет выводит в навбар список контекстов (а это довольно простая выборка через xPDO, и я почти уверен, что и pdoTools такое может обычным pdoResources). Вешайте на ссылки в навбар гет параметр например, и в плагине на событие onhandlerequest меняете контекст через switchcontext().
А насчет всего остального это уже более сложный вопрос. Нужно знать, где во-первых происходит дело: на фронте или в бэкенде, что и как нужно выбирать и много чего еще. Это уже такой хороший вопрос проектирования получается. Создавая сайт с контекстами, метро, городам, нужно хорошо знать MODX, иначе может получится полное *овно. Знаю по себе, все готовлю материал по похожему в чем то проекту.
Дмитрий
19 марта 2017, 21:16
1
0
Ну, вообще, если почитать документацию, то можно увидеть сниппет CRCalc, который как раз этим и занимается.
Ну или можно написать свой сниппет, который будет принимать значение цены, валюту, в которую нужно пересчитать и выдавать уже готовую стоимость.
Типа такого:
<?php
/** @var array $scriptProperties */
/** @var currencyrate $currencyrate */
if (!$currencyrate = $modx->getService('currencyrate', 'currencyrate', $modx->getOption('currencyrate_core_path', null, $modx->getOption('core_path') . 'components/currencyrate/') . 'model/currencyrate/', $scriptProperties)) {
	return 'Could not load currencyrate class!';
}
if(empty($input)) {return '';}
$list = $currencyrate->getList();
//тут можно по-нормальному отформатировать данные
$input = (trim(str_replace(' ','',$input)));
if(!empty($divider)) {
	$divider = $list[$divider];
	$output = $currencyrate->formatPrice(($input / $divider), $format, $noZeros);
}
return $output;
Дмитрий
18 марта 2017, 16:07
1
0
Я пару месяцев назад тоже делал поиск по ресурсам, но так так SimpleSearch мало что умеет, а нужно было делать примерно такую штуку

написал, как и предложил Олег в комментарии выше, заполнение параметров в WHERE в pdoResources. Можно попробовать сделать примерно такое же, только для Tickets.
Код конечно, так себе, но работает неплохо. Из 4000 ресурсов выборка идет довольно быстро.
<?php
$pdo = $modx->getService('pdoTools');
$query = $modx->newQuery('modResource');
$query->select('modResource.id');
$query->leftJoin('modTemplateVarResource', 'TAG', 'modResource.id=TAG.contentid');
$query->leftJoin('modTemplateVarResource', 'RATING', 'modResource.id=RATING.contentid');

if (($_GET['search'] != '')) {
    $search = $_GET['search'];
    $string = array(
        array(
            'modResource.pagetitle:LIKE' => '%' . $search . '%',
            'OR:modResource.content:LIKE' => '%' . $search . '%'
        ),
        array(
            'modResource.template:=' => 4
        )
    );
} else {
    $string = array(
        'modResource.template:=' => 4
    );
}
if ($_GET['cat'] != 0) {
    if ($_GET['cat']!=5046){
        $cat = $_GET['cat'];
        $categories = array(
            'AND:modResource.parent:=' => $cat
        );
    } else {
        $cat = array(5030,5031,5032,5037,5038,5039,5040,5041);
        $categories = array(
            'AND:modResource.parent:IN' => $cat
        );
    }
} else {
    $categories = array(
    );
}

if ($_GET['tag'] != '0') {
    $tag = $_GET['tag'];
    $tags = array(
        'AND:TAG.tmplvarid:=' => 1,
        'AND:TAG.value:LIKE' => '%' . $tag . '%'
    );
} else {
    $tags = array(
    );
}

$pdoWhere = '';
$sortby = 'createdon';
switch ($_GET['searchlast']) {
    case 0:
        $query->sortby('modResource.createdon', 'ASC');
        $sortby = 'createdon';
        $rating = array();
        break;
    case 1:
        $rating = array(
            'AND:RATING.tmplvarid:=' => 43
        );
        $query->sortby('RATING.value', 'DESC');
        $sortby = 'HitsPage';
        break;
    case 2:
        $rating = array();
        $sortby = 'starSum';
        break;
    case 3:
        $rating = array();
        $pdoWhere = '{"atention:=":"1"}';
        break;
}

$where = array_merge($string, $categories, $tags, $rating);
$query->distinct();
$query->where($where);
$query->prepare();
$query->stmt->execute();
$res = $query->stmt->fetchAll(PDO::FETCH_COLUMN, 0);
$ids = implode(',', $res);

//$raw = $query->toSQL();
//return $raw;

if (($ids!='')){
$output = $pdo->runSnippet('pdoPage', array(
'parents' => '5009',
 'limit' => 15,
 'hideContainers' => 1,
 'pageLimit' => 11,
 'tplPageWrapper' => '@INLINE {$prev}{$pages}{$next}',
 'tplPageActive' => '@INLINE <li><span class="pagenav">{$pageNo}</span></li>',
 'tplPage' => '@INLINE <li><a href="{$href}" class="pagenav">{$pageNo}</a></li>',
 'tplPagePrev' => '@INLINE <li class="pagination-prev"><a href="{$href}">Назад</a></li>',
 'tplPageNext' => '@INLINE <li class="pagination-next"><a href="{$href}">Вперед</a></li>',
 'tplPagePrevEmpty' => '@INLINE <li class="pagination-prev"><span class="pagenav">Назад</span></li>',
 'tplPageNextEmpty' => '@INLINE <li class="pagination-next"><span class="pagenav">Вперёд</span> </li>',
 'resources' => $ids,
 'includeTVs' => 'HitsPage,isVideo,starSum,atention',
 'where' => $pdoWhere,
 'sortby' => $sortby,
 'sortdir' => 'DESC',
 'prepareTVs' => 1,
 'processTVs' => 1,
 'tpl' => '@FILE:chunks/infocenter/search.row.tpl'
));
$output .= '<div class="k2Pagination">
                    <ul>
                        {$_modx->getPlaceholder("page.nav")}
                    </ul>
                    <div class="clr"></div>
                </div>';
}
else {
    $output = '<h3>Ничего не найдено. Попробуйте упростить запрос</h3>';
}
return $output;
Дмитрий
17 марта 2017, 22:11
0
Большое спасибо за идею и код!
Завтра обязательно попробую и отпишусь.
Дмитрий
15 марта 2017, 23:08
0
Вот когда я отключал проверку на дублирование, ничего не работало. Видимо, где-то я что-то делал не так. Сейчас отключил дублирование, отключил плагин, все работает. Спасибо!
Дмитрий
07 марта 2017, 11:42
+1
Дайте посмотреть?
Можете прислать данные в личку.
Дмитрий
05 марта 2017, 13:25
+1
Простой пример из miniShop2. Может он как-то поможет? Я не могу сейчас проверить ваш код и что-нибудь подсказать, к сожалению.
<div id="msGallery">
    {if $files?}
        <div class="fotorama"
             data-nav="thumbs"
             data-thumbheight="45"
             data-allowfullscreen="true"
             data-swipe="true"
             data-autoplay="5000">
            {foreach $files as $file}
                <a href="{$file['url']}" target="_blank">
                    <img src="{$file['small']}" alt="" title="">
                </a>
            {/foreach}
        </div>
    {else}
        <img src="{('assets_url' | option) ~ 'components/minishop2/img/web/ms2_medium.png'}"
             srcset="{('assets_url' | option) ~ 'components/minishop2/img/web/ms2_medium@2x.png'} 2x"
             alt="" title=""/>
    {/if}
</div>