Konstantin

Konstantin

С нами с 24 декабря 2022; Место в рейтинге пользователей: #997
Konstantin
31 декабря 2022, 22:46
0
Пардоньте, так точно, все есть!
Konstantin
31 декабря 2022, 17:20
0
Подскажите как вывести канонические ссылки на страницах?
В документации нет примера использования, я пытался так [[PolylangCanonical]] не получается, сказано что нужно использовать параметр $tpl с чанком, можете написать пример такого чанка?
Konstantin
31 декабря 2022, 11:25
0
Спасибо за ссылку на отличную статью которая расширила мое понимание.
Но добиться нужного результата в запросе так и не смог, пришлось собирать все значения и затем через foreach сравнивать и получать нужные данные…

<?php
  $tag = 1; // 1 аренда или 2 продажа; 


$query = $modx->newQuery('modTemplateVarResource');
$query->select(
  array('tmplvarid','contentid','value')
);
$query->sortby('FIELD(tmplvarid,7,11,13,9,12,14,15)'); // нужный порядок
$query->where(array(
    'tmplvarid:IN'=> array(7,11,13,9,12,14,15) // получим значения всех тв в кучу
));
$resources = $modx->getIterator('modTemplateVarResource',$query);

$AparttagTVs = [];
$TVs = [];
$text = '';

// 7 поле которое отвечает за вывод всех полей
// из результата запроса создаю массив только по этому полю
foreach ($resources as $apt) {
    if ($apt->get('tmplvarid') == 7) {
        $AparttagTVs[$apt->get('contentid')] =  $apt->get('value');
        // $output .= '<p>tmplvarid:'.$apt->get('tmplvarid').' $apt: '.$apt->get('contentid').' = '.$apt->get('value').'</p>';
    }
}

// перебираю весь результат запроса и создаю новый массив только с теми значениями полей у ресурсов которых в поле 7 задано аренда или продажа
foreach ($resources as $resource) {
    if ($AparttagTVs[$resource->get('contentid')] == $tag ) {
        $TVs[$resource->get('tmplvarid')][] =  $resource->get('value');
        // $output .= '<p>tmplvarid:'.$resource->get('tmplvarid').' $resource: '.$resource->get('contentid').' = '.$resource->get('value').'</p>';
    }
}

// вывожу все поля 
foreach ($TVs as $key => $v ) {
    $TVs[$key] = array_unique($TVs[$key]);
    
    if ($key !== 7) {
        
            $text .= '
                    <select name="name'.$key.'">
                        <option value="">Field-'.$key.'</option>';
            
                        foreach ($TVs[$key] as $k => $val) {
                            $text .=  '<option value="'.$val.'">'.$val.'</option>';
                        }
            $text .= '</select>';
        
          
        
    // $output .= '<p>'.$val.'-'.$text.'</p>';
        
    }
}

// echo '<pre>';
// echo print_r($AparttagTVs);
// echo '</pre>';
// echo '<pre>';
// echo print_r($TVs);
// echo '</pre>';
// echo $output;

return $text;
Konstantin
26 декабря 2022, 16:35
0
Здравствуйте, Polylang верно выводит перевод поля MIGX только на ресурсе которому он прикреплен, если же его выводить на других ресурсах то показывает только язык оригинала, делаю так:
[[getImageList? &docid=`2` &tvname=`FactsAboutNalTV` &tpl=`NalFactChunk`]]
Есть варианты как заставить его показывать перевод?
Konstantin
25 декабря 2022, 11:04
0
Доработайте пожалуйста перевод значений для списков. Вот ситуация как должно быть по логике:
на основном языке ресурса админ выбирает из списка вид интерьера квартиры, на основании этого поля будет делаться фильтр, поэтому он был задан как (Modern==1||Minimalistic==2) чтобы фильтровало по value, далее админ не должен его видеть в локализациях ресурса, переводы этих значений должны подхватываться из настроек Polylang вкладки TV, где привязаны переводы значений для этого поля в таком же формате ((Модерн==1||Минималистичный==2)). Согласитесь это логично потому что интерьер одной и той же квартиры не меняется в зависимости от языка и тогда зачем его редактировать там?

На данный момент я перепробовал все варианты настроек и не смог добиться такого поведения
Konstantin
24 декабря 2022, 23:03
0
Да, все оказалось немного не так как я себе представлял а намного проще. Спасибо что навели меня на правильную мысль. Со мной сыграло злую шутку кеширование поэтому я никак не мог получить верное value, но после всех чисток все стало на свои места: (Option1==value1||Option2==value2) в этом примере получаем value так [[*myTvName]], а option так [[*myTvName:tvLabel]] и никакого сниппета и кода больше не нужно! Спасибо