Тимур

Тимур

Был в сети 08 марта 2020, 20:32
Заказы принимаю
Вы можете и сами посмотреть в логах, что при сохранении документа, даже с пустым alias, modx подставляет pagetitle в alias и передает объект плагину на событие уже с заполненным alias. То есть проверить alias на пустоту нельзя. Даже если посмотреть объект на событие OnBeforeDocFormSave, то там alias тоже уже сгенерирован.
Потому что при сохранении документа плагин получает объект сохраненного документа. Поэтому ваш код будет выглядеть следующим образом:
if ($modx->event->name == 'OnDocFormSave') {
    if (!empty($resource->get('menutitle'))) {
        $resource->set('alias',$resource->get('menutitle'));
    }
    else {
        $resource->set('alias',$resource->get('pagetitle'));
    }
    $resource->save();
}
Вызов на fenom:
{'!mSearchForm' | snippet : [
    'pageId' => 3550,
    'element' => 'msProducts',
    'tplForm' => 'tpl.mSearch2.form.Custom',
    'tpl' => 'tpl.mSearch2.ac.Custom',
    'limit' => 0,
    'autocomplete' => 0
]}

<div class="ms2_product">
    <form method="post" class="ms2_form">
        <input type="hidden" name="id" value="{$id}">
        <input type="hidden" name="count" value="1">
        <input type="hidden" name="options" value="[]">
        
        <div class="prod_tab img col-md-2">
            {if $image}
                <img src="{$image}" class="mw-100" alt="{$pagetitle}" title="{$pagetitle}"/>
            {else}
                <img src="/assets/images/no-image.png" class="mw-100" alt="{$pagetitle}" title="{$pagetitle}"/>
            {/if}
        </div>
        
        {if $article}
            <div class="prod_tab art col-md-1">
                <span>{$article}</span>
            </div>
        {/if}
       
        <a href="{$id | url}" class="ajax-popup-link">{$pagetitle}</a>
        
        <div class="prod_tab vendor col-md-1">
            {$_pls['vendor.name']}      
        </div>
        
        <div class="prod_tab price col-md-1">
            {$price} {'ms2_frontend_currency' | lexicon}
        </div>
        
        <div class="prod_tab pack col-md-1">
            <span style="text-align: center;width: 100%;">{$_pls['pack-norm.value']} </span>
        </div>
        
        <div class="prod_tab total col-md-1">
            <span class='number-wrapper'>              
                <input type="number" name="count" class="product_count form-control" value=""/>
            </span>
        </div>
        
        <div class="prod_tab buy col-md-2">
            <button class="btn btn-primary" type="submit" name="ms2_action" value="cart/add" style="width:100%;">
                {'ms2_frontend_add_to_cart' | lexicon}
            </button>
        </div>
    </form>
</div>
Вы можете использовать fenom и находить значение tv родителя очень просто.
У каждого ресурса есть поле
parent
, к нему и обращайтесь:
{$_modx->resource.parent | resource : 'tv-name'}
Можете все это сохранить в переменную и подставлять ее в вызов сниппета:
{var $tv = $_modx->resource.parent | resource : 'tv-name'}
{'!pdoResources' | snippet : [
    ....
    'where' => ['tags' => $tv]
    ...
]}