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, на несколько уровней выше.Как это сделать?
Комментарии: 15
ХЗ где ты пытаешься это сделать, но предположим, что в чанке, тогда скорее всего надо писать так
{($id | resource: 'parent') | resource: 'pagetitle'}
также выводит Home (id=1)
все верно, в чанке прописан код вывода изображения для определенного документа. Есть задумка немного автоматизировать формирование alt для картинки и вписывать туда значения родителя, к которому принадлежит документ (разбавленный другими фразами. Как Вы наверное уже поняли, родитель — это город. Таких родителей около 100ни.
Сначала нужно проверить, что выдает:
$_modx->resource.parent
$_modx->resource.id
$parent
и уже оттуда плясать. =)
$_modx->resource.parent — выводит 0
$_modx->resource.id — выводит 1
$parent — ничего не выводит
$_modx->resource.id — выводит 1
$parent — ничего не выводит
$_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 надо подумать как это сделать.
Но сперва скажи угадал? или у тебя что-то другое?
в точку)
Чанк главной карточки
Чанк главной карточки
<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}
Ну тут 2 варианта:
1) не очень хороший. В $file должно быть $file['resource_id'] и в alt="… ТО САМОЕ..." можно сделать так
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'
]}
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']}"
Примерно так не проверял
Первый вариант работает, спасибо. Картинок будет много.
Второй вариант не заработал
Второй вариант не заработал
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
Может вы закрывающею } не скопировали???? Ошибка на это похожа.
Вообще у тебя в ms2Gallery 'limit'=>1 и 2 вариант будет не сильно быстрее. 2+1 простых запроса в базу против 1 более сложного на каждый вызов ms2Gallery. То есть на 1 картинку.
Если картинок много то лучше в основном pdoResources сразу и картинки и Parent подцепить join-ми. Тогда быстрее будет. 1 запрос на все против 3 запросов на каждый дочерний ресурс.
Примерно так:
пс. pdoResources наверно лучше кешировать.
Вообще у тебя в 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 наверно лучше кешировать.
Скопируйте сниппет ms2Gallery и добавьте свой параметр, в нем передавайте pagetitle, так точно быстрее будет.
Не быстрее. Так только от 1 запроса на картинку избавишься. По идее самый быстрый вариант подцепить парент титле и картинку в pdoResource. На 99% уверен. Но, конечно, если гнаться за скоростью, надо тестировать все варианты и на практике смотреть уже.
Тут основная боль, это phpthumbon с наложением ватермарка. =)
Эти цифры означают что вы на главной странице.
А по существу использовать pdoField.
А по существу использовать pdoField.
{$id | pdoField : '{"field":"pagetitle", "top":1}'}
Вроде как то так
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.