Павел Романов

Павел Романов

С нами с 03 марта 2014; Место в рейтинге пользователей: #70
Павел Романов
17 ноября 2021, 16:42
0
Так у Вас msOptionsPrice перебивает плагин — он же тоже на msOnBeforeAddToCart висит. Попробуйте поменять приоритет или повесить свой плагин на событие самого msOptionsPrice, например, на msopOnAfterGetCost.
Павел Романов
17 ноября 2021, 16:04
0
Код неправильный. Input — одинарный тег и его не нужно открывать/закрывать.
То есть именно так:
<input type="hidden" name="calc_price" value="" />

А в js через
$('input[name="calc_price"]').val(***);
Павел Романов
17 ноября 2021, 15:45
0
Где-то ошиблись. Это 100% работает )
Точно число приходит в поле? Без пробелов?
Павел Романов
17 ноября 2021, 14:55
0
Сделайте в форме кнопки скрытое поле, куда передавайте JS-ом рассчитанное калькулятором значение:
<input type="hidden" name="calc_price" value="" />

Сделайте плагин на событие msOnBeforeAddToCart, где ловите его и подменяйте цену товара:

if(is_numeric($_POST['calc_price'])){
    $product->set('price', $_POST['calc_price']);
}
Павел Романов
17 ноября 2021, 10:17
+1
В форму добавления товара добавьте текстовое поле с name=«options[имя_поля]»:
<form method="post" class="ms2_form">
    ...
    <input type="text" name="options[fieldname]" value=""/>
    ...
</form>

Его значение в корзине и письмах выводите так:
{$product.options.fieldname}
Павел Романов
21 октября 2021, 10:31
+2
Добавьте параметр:
&setMeta=`0`
В этом случае pdoPage не будет формировать canonical, но и мета-тегов со ссылками на предыдущую и следующую страницу также не будет.
Павел Романов
19 октября 2021, 10:48
0
Верно, он нужен только для Ajax-пагинации.
Павел Романов
19 октября 2021, 10:03
0
Вроде всегда был. Можно даже параметром ajaxElemRows переопределить ))
Павел Романов
18 октября 2021, 19:28
0
Оберните вывод в DIV с классом rows:

<div class="cell-lg-8 cell-xs-10 decot-post-left" id="pdopage">
    <div class="rows">
        [[!pdoPage?
            &parents=`[[*id]]`
            &tpl=`Articl.tpl`
            &showHidden=`1`
            &limit=`4`
            &includeTVs=`date`
            &ajaxMode=`default`
            &tvFilters=`type_content==Статья`
            &sortby=`{ "id":"DESC" }`
        ]]
    </div>
    <div class="blog-item">
        <nav>
            [[!+page.nav]]
        </nav>
    </div>    
</div>
Павел Романов
18 октября 2021, 10:33
0
А если так?
$parent = $modx->getObject('modResource', $pid);
$result[] = '<a href="'.$modx->getOption('site_url').$parent->get('uri').'">'.$parent->get('pagetitle').'</a>';

$table = $modx->getOption('table_prefix').'ms2_product_categories';
$sql = "SELECT * FROM {$table} WHERE `product_id` = {$rid}";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $row) {
    $resource = $modx->getObject('modResource', $row['category_id']);
    $result[] = '<a href="'.$modx->getOption('site_url').$resource->get('uri').'">'.$resource->get('pagetitle').'</a>';
   	
}
return implode($delimeter, $result);
Павел Романов
18 октября 2021, 09:45
+1
Babel реализует только связь между ресурсами в разных контекстах на фронте (при переключении языков, к примеру) и в админке. Больше он ничего, по сути, не делает.
Если у Вас одинаковые структуры (наборы страниц) для каждого города, то Babel поможет. Если разные, то смысла в нем нет.

А редирект по IP реализуйтеь плагином на OnHandleRequest, к примеру. Babel тут не при чем.
Павел Романов
17 октября 2021, 15:20
0
А так?
[[!pdoResources? 
    &offset=`5` 
    &tpl=`cityes.tpl` 
    &limit=`0` 
    &parents=`[[BabelTranslation? &resourceId=`5`]]` 
    &tpl_n23=`cityes20.tpl` 
    &sortby=`{ "pagetitle":"ASC" }`
]]
Павел Романов
13 октября 2021, 11:18
0
Если количество товара выводится не только на странице самого товара, а еще, к примеру, в категориях, то лучше после парсинга чистить кеш всего сайта и вместо приведенного Вами кода поставить это:
$modx->cacheManager->refresh();

Если выводится только на странице товара (и если в массиве $contentids у Вас ID обновленных ресурсов), то так:
// очищаем кэш обновленных ресурсов
$ids = array_unique($contentids);
foreach($ids as $id){
    $resource=$modx->getObject('modResource',$id);
    $cacheKey = $resource->getCacheKey();
    $modx->cacheManager->refresh(array('resource' => array('key' => $cacheKey)));
}
Павел Романов
07 октября 2021, 18:02
+1
Сделайте плагин на событие OnManagerLogin:
<?php
$user_id = 5; // ID юзера
$resource_id = 12; // ID страницы
if($user->get('id') == $user_id){
    $modx->sendRedirect(MODX_MANAGER_URL.'index.php?a=resource/update&id='.$resource_id);
}
Павел Романов
06 октября 2021, 12:53
0
А если так?:
<script>
if(typeof pdoPage !== 'undefined') {
    pdoPage.callbacks.after = function(config, response) {
        $('.fancyboxModal ').fancybox({
	    // .....
        });
        
        $('#pdopage').removeClass('loading');
        $('#pdopage').css('opacity', 1);
    };
}
Павел Романов
06 октября 2021, 12:36
0
Добавить этот код на страницу, прописав вместо //… опции fancybox, которые у Вас используются для при клике на ссылку с классом fancyboxModal.
Павел Романов
06 октября 2021, 11:26
0
Попробуйте переинициализировать fancybox по callback от pdoPage:
<script>
if(typeof pdoPage !== 'undefined') {
    pdoPage.callbacks.after = function(config, response) {
        $('.fancyboxModal ').fancybox({
	    // .....
        });
    };
}
</script>
Павел Романов
03 октября 2021, 09:57
0
Надо в эту TV добавить какие-то символы, обрамляющие ID.
Например:
-6-,-58-,-66-

И тогда:
&tvFilters=`user_id==%-[[!+modx.user.id]]-%`
Павел Романов
29 сентября 2021, 10:31
+1
А так пробовали?
[[!pdoUsers:default=`Ничего не найдено`?
    ...
]]
Павел Романов
28 сентября 2021, 16:17
+1
Лучше сниппетом сделайте.
<?php
if($tv == 'Да'){
    if($modx->getPlaceholder('total_number') == 1){
        //...
    }else{
        //...
    }
}

И его в чанке вызывайте:
{'!snipetName' | snippet: [ 
    'tv' => $_pls['tv.answer'] 
]}