Как удалить запятую после последнего элемента в foreach?
Есть такой код:
Выводит:
Подскажите, как удалить (разделитель) запятую у последнего элемента БЕЗ использования css?
{foreach $_modx->resource.TvTags | fromJSON | split as $tag}
<a href="{25|url:['scheme'=>'full']}{$tag}/">{$tag}</a>,
{/foreach}
Выводит:
<a href="url-страницы/">Какой-то текст1</a>, <a href="url-страницы/">Какой-то текст2</a>, <a href="url-страницы/">Какой-то текст3</a>, <a href="url-страницы/">Какой-то текст4</a>, <a href="url-страницы/">Какой-то текст5</a>,
Подскажите, как удалить (разделитель) запятую у последнего элемента БЕЗ использования css?
Комментарии: 13
Должно так работать:
{foreach $_modx->resource.TvTags | fromJSON | split as $tag last=$last}
{if $last}
<a href="{25|url:['scheme'=>'full']}{$tag}/">{$tag}</a>
{else}
<a href="{25|url:['scheme'=>'full']}{$tag}/">{$tag}</a>,
{/if}
{/foreach}
Спасибо, добрый человек, то что нужно!
Андрей, может это глупый вопрос, но откуда получаются значения last=$last? Не пойму, но работает. Или это типа модификатора?
Немного подробней про first и last можно почитать тут — https://github.com/fenom-template/fenom/blob/master/docs/ru/tags/foreach.md
Благодарю.
Теперь понятно, если first или last имеет значение TRUE, то это первая и последняя итерация соответственно.
Теперь понятно, если first или last имеет значение TRUE, то это первая и последняя итерация соответственно.
Можно и покороче:
{foreach $_modx->resource.TvTags | fromJSON | split as $tag}
<a href="{25|url:['scheme'=>'full']}{$tag}/">{$tag}</a>{!$tag@last ? ',' : ''}
{/foreach}
Благодарю. На этом варианте остановлюсь.
Еще такой вопрос.
Вышеуказанные решения — это вывод в ресурсе принадлежащих ему(ресурсу) тегов.
А в самом облаке облаке тегов все теги сайта вывожу так:
В chunks/tags/tags_list_item.tpl следующий код:
То есть:
Еще такой вопрос.
Вышеуказанные решения — это вывод в ресурсе принадлежащих ему(ресурсу) тегов.
А в самом облаке облаке тегов все теги сайта вывожу так:
{$_modx->runSnippet('@FILE snippets/TagsList.php', [
'tv_id' => 8,
'tpl' => '@FILE chunks/tags/tags_list_item.tpl',
'tags_page' => 25
])}
В chunks/tags/tags_list_item.tpl следующий код:
<a href="{$tags_page}{$tag}/">{$tag}</a>,
Выводятся так:<a href="url-страницы-тега/">Какой-то текст1</a>, <a href="url-страницы-тега/">Какой-то текст2</a>, <a href="url-страницы-тега/">Какой-то текст3</a>, <a href="url-страницы-тега/">Какой-то текст4</a>, <a href="url-страницы-тега/">Какой-то текст5</a>,
Как в этом случае удалить запятую у последнего тега, если это не массив, а много строк?То есть:
string string string string string string string string string string string ....
Логику перенесите в код сниппета
Код сниппета TagsList.php такой:
<?php
$pdoTools = $modx->getService('pdoTools');
$TvSuperSelect = $modx->getService('tvsuperselect', 'tvsuperselect', MODX_CORE_PATH . 'components/tvsuperselect/model/tvsuperselect/');
if (!$TvSuperSelect) {
$modx->log(xPDO::LOG_LEVEL_ERROR, 'Не удалось загрузить TvSuperSelect');
return;
}
$q = $modx->newQuery('tvssOption');
$q->groupby('value');
$q->select('value, tv_id');
$q->where(array(
'tv_id' => $tv_id
));
if ($q->prepare() && $q->stmt->execute()) {
$tags = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
}
$tags_page = $modx->makeUrl($tags_page, '', '', 'full');
foreach($tags as $tag) {
$result .= $pdoTools->getChunk($tpl, array(
'tag' => $tag['value'],
'tags_page' => $tags_page
));
}
return $result;
Что тут нужно изменить/добавить?
Не знаю на сколько это правильно, но сделал так и все работает.
и удалил в выводе сниппета
Правильно я сделал, или есть более оптимальный вариант?
<?php
//..........
foreach($tags as $tag) {
array(
'tags_link' => $tagLink[] = '<a href="' . $tags_page . $tag['value'] . '/">' . $tag['value'] . '</a>'
);
}
return implode(', ', $tagLink);
и удалил в выводе сниппета
'tpl' => '@FILE chunks/tags/tags_list_item.tpl',
Правильно я сделал, или есть более оптимальный вариант?
Или так:
<?php
//..........
foreach($tags as $tag) {
array(
$tagLink[] = '<a href="' . $tags_page . $tag['value'] . '/">' . $tag['value'] . '</a>'
);
}
return implode(', ', $tagLink);
Для гибкости и универсальности можно было бы оставить свойство tpl и добавить еще и свойство outputSeparator, а в сниппете использовать его
На счет свойства outputSeparator — согласен — для гибкости, в вызове сниппета можно менять разделитель.
Сделал так:
А свойство tpl — для чего, не пойму?
Объясни, пожалуйста на примере (как бы сам сделал), так как не особо силен в php, тем более в MODX варианте. Но хочу разобраться как в MODX все это работает.
Заранее, благодарю.
Сделал так:
<?php
//..........
foreach($tags as $tag) {
$tagLink[] = '<a href="' . $tags_page . $tag['value'] . '/">' . $tag['value'] . '</a>';
}
$outputSeparator = (isset($outputSeparator)) ? $outputSeparator : '';
return implode($outputSeparator, $tagLink);
А свойство tpl — для чего, не пойму?
Объясни, пожалуйста на примере (как бы сам сделал), так как не особо силен в php, тем более в MODX варианте. Но хочу разобраться как в MODX все это работает.
Заранее, благодарю.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.