Fenom вывод имени parent

Задача на первый взгляд простая. Есть изображение, которое принадлежит к определенному документу. Документы сгруппированы по городам-документам. Нужно вывести имя parent документа внутри alt-а изображения.
<img src="{$file['url'] | phpthumbon: 'fltr[]=wmi|assets/wm/wm.png|C|40|100|100|0'}" alt="{$_modx->resource.parent | resource : 'pagetitle'}" title="{$file['name']}">
{$_modx->resource.parent | resource: 'pagetitle'} выводит Home, на несколько уровней выше.
Как это сделать?
Антон
19 сентября 2022, 22:31
modx.pro
959
0

Комментарии: 15

Артур Шевченко
19 сентября 2022, 23:00
0
ХЗ где ты пытаешься это сделать, но предположим, что в чанке, тогда скорее всего надо писать так
{($id | resource: 'parent') | resource: 'pagetitle'}
    Антон
    20 сентября 2022, 20:18
    0
    также выводит Home (id=1)
      Антон
      20 сентября 2022, 20:35
      0
      все верно, в чанке прописан код вывода изображения для определенного документа. Есть задумка немного автоматизировать формирование alt для картинки и вписывать туда значения родителя, к которому принадлежит документ (разбавленный другими фразами. Как Вы наверное уже поняли, родитель — это город. Таких родителей около 100ни.
      Роман
      20 сентября 2022, 09:09
      0
      Сначала нужно проверить, что выдает:
      $_modx->resource.parent
      $_modx->resource.id
      $parent
      и уже оттуда плясать. =)
        Антон
        20 сентября 2022, 20:19
        0
        $_modx->resource.parent — выводит 0
        $_modx->resource.id — выводит 1
        $parent — ничего не выводит
          Александр Туниеков
          20 сентября 2022, 20:36
          0
          $_modx->resource.id — выводит 1
          Ну тут выдается главная страница. То есть код выполняется когда показывается главная. $_modx->resource это массив параметров страницы которая загружается показывается.
          Ты на главной выводишь блок с ресурсами. Например:
          {'!pdoResources' | snippet : [
              'parents'=>5,
              'tpl'=>'res_chunk'
          ]}
          В res_chunk можно указывать:
          {($id | resource: 'parent') | resource: 'pagetitle'}

          И должно верно вернуть паджтитл ресурса родителя.
          Но наверно ты в res_chunk еще вызываешь ms2Gallery c каким-то чанком. Например gallery_chunk и вот в нем уже $id вернет id файла (или 0 наверно). Чтоб получить id ресурса из res_chunk надо подумать как это сделать.
          Но сперва скажи угадал? или у тебя что-то другое?
            Антон
            20 сентября 2022, 20:39
            0
            в точку)
            Чанк главной карточки
            <div class="col-6 col-md-3 col-sm-6 gv-card">
            <div class="product-grid">
            <div class="product-image">
            <a href="[[~[[+id]]]]" class="image">[[!ms2Gallery? &resources=`[[+id]]` &limit=`1` &tpl=`ms2Gallery.mainpage.tpl`]]</a> 
            <div class="add-to-cart">
            <a href="[[~[[+id]]]]">[[+pagetitle]]</a>
            </div>
            </div>
            </div>
            </div>
            Чанк ms2Gallery.mainpage.tpl:
            {if $files?}
                {foreach $files as $file}
            <img src="{$file['url'] | phpthumbon: 'fltr[]=wmi|assets/wm/wm.png|C|40|100|100|0'}" alt="...ТО САМОЕ..." title="{$file['name']}">
                {/foreach}
            {else}
            <img src="assets/img/projects/v-1.png" alt="[[+pagetitle]]" title="[[+pagetitle]]"/>
            {/if}
              Александр Туниеков
              20 сентября 2022, 21:03
              0
              Ну тут 2 варианта:
              1) не очень хороший. В $file должно быть $file['resource_id'] и в alt="… ТО САМОЕ..." можно сделать так
              alt="{($file['resource_id'] | resource: 'parent') | resource: 'pagetitle'}"
              Но модификатор | resource ресурсо-затратный и если будет 100 картинок, то страница будет тупить.
              2) В ms2Gallery сразу добавить запрос паджтитл родителей
              {'!ms2Gallery' | snippet: [
              'resources'=>$id,
              'innerJoin'=>['Parent'=>['class'=>'modResource','on'=>'Parent.id = modResource.id'],
              'select'=>['Parent'=>'Parent.pagetitle as parent_title'],
              'limit'=>1,
              'tpl'=>'ms2Gallery.mainpage.tpl'
              ]}
              alt="{($file['parent_title']}"
              Примерно так не проверял
                Антон
                20 сентября 2022, 21:52
                0
                Первый вариант работает, спасибо. Картинок будет много.
                Второй вариант не заработал
                Unexpected end of expression in modchunk/84 line 5, near '{'!ms2Gallery' | snippet: [↵'resources'=>$id,↵'innerJoin'=>['Parent'=>['class'=>'modResource','on'=>'Parent.id = modResource.id'],↵'select'=>['Parent'=>'Parent.pagetitle as parent_title'],↵'limit'=>1,↵'tpl'=>'ms2Gallery.mainpage.tpl'↵]' <- there
                  Александр Туниеков
                  20 сентября 2022, 22:41
                  0
                  Может вы закрывающею } не скопировали???? Ошибка на это похожа.

                  Вообще у тебя в ms2Gallery 'limit'=>1 и 2 вариант будет не сильно быстрее. 2+1 простых запроса в базу против 1 более сложного на каждый вызов ms2Gallery. То есть на 1 картинку.
                  Если картинок много то лучше в основном pdoResources сразу и картинки и Parent подцепить join-ми. Тогда быстрее будет. 1 запрос на все против 3 запросов на каждый дочерний ресурс.
                  Примерно так:
                  {'!pdoResources' | snippet : [
                      'parents'=>5,
                      'tpl'=>'res_chunk',
                  	'loadModels'=>'ms2gallery',
                  	'leftJoin'=>[
                  		'File'=>[
                  			'class'=>'msResourceFile',
                  			'on'=>'File.resource_id = modResource.id and File.rank = 1 and File.path LIKE \'%small%\''
                  		],
                  		'Parent'=>[
                  			'class'=>'modResource',
                  			'on'=>'Parent.id = modResource.parent'
                  		],
                  	],
                  	'select'=>[
                  		'modResource'=>'*',
                  		'File'=>'File.url as file_url,File.name as file_name',
                  		'Parent'=>'Parent.pagetitle as parent_title',
                  	],
                  ]}
                  res_chunk:
                  <div class="col-6 col-md-3 col-sm-6 gv-card">
                  	<div class="product-grid">
                  		<div class="product-image">
                  			<a href="{$id | url}" class="image">
                  				{if $file_url}
                  					<img src="{$file_url}" alt="{$parent_title}" title="{$file_name}">
                  				{else}
                  					<img src="assets/img/projects/v-1.png" alt="{$pagetitle}" title="{$pagetitle}"/>
                  				{/if}
                  			</a> 
                  			<div class="add-to-cart">
                  				<a href="{$id | url}">{$pagetitle}</a>
                  			</div>
                  		</div>
                  	</div>
                  </div>
                  Я бы так делал, если картинок много. И phpthumbon бы не стал использовать, а задал бы нужное превью в галерее. Интересно даже какая скорость будет во всех 3 вариантах.
                  пс. pdoResources наверно лучше кешировать.
                Роман
                21 сентября 2022, 08:43
                0
                Скопируйте сниппет ms2Gallery и добавьте свой параметр, в нем передавайте pagetitle, так точно быстрее будет.
                  Александр Туниеков
                  21 сентября 2022, 18:44
                  0
                  Не быстрее. Так только от 1 запроса на картинку избавишься. По идее самый быстрый вариант подцепить парент титле и картинку в pdoResource. На 99% уверен. Но, конечно, если гнаться за скоростью, надо тестировать все варианты и на практике смотреть уже.
                    Роман
                    22 сентября 2022, 08:55
                    0
                    Тут основная боль, это phpthumbon с наложением ватермарка. =)
              Алексей Смирнов
              20 сентября 2022, 20:40
              0
              Эти цифры означают что вы на главной странице.
              А по существу использовать pdoField.
            Дмитрий Середюк
            26 сентября 2022, 08:16
            0
            {$id | pdoField : '{"field":"pagetitle", "top":1}'}
            Вроде как то так
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              15