Как удалить запятую после последнего элемента в foreach?

Есть такой код:
{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?
Дмитрий
25 января 2019, 22:19
modx.pro
1 642
0

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

Андрей
25 января 2019, 23:14
+1
Должно так работать:
{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}
    Дмитрий
    25 января 2019, 23:37
    0
    Спасибо, добрый человек, то что нужно!
      Дмитрий
      25 января 2019, 23:49
      0
      Андрей, может это глупый вопрос, но откуда получаются значения last=$last? Не пойму, но работает. Или это типа модификатора?
      Баха Волков
      26 января 2019, 09:47
      +1
      Можно и покороче:

      {foreach $_modx->resource.TvTags | fromJSON | split as $tag}
            <a href="{25|url:['scheme'=>'full']}{$tag}/">{$tag}</a>{!$tag@last ? ',' : ''}
      {/foreach}
        Дмитрий
        27 января 2019, 02:27
        0
        Благодарю. На этом варианте остановлюсь.

        Еще такой вопрос.

        Вышеуказанные решения — это вывод в ресурсе принадлежащих ему(ресурсу) тегов.

        А в самом облаке облаке тегов все теги сайта вывожу так:
        {$_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 ....
          Баха Волков
          27 января 2019, 10:49
          +1
          Логику перенесите в код сниппета
            Дмитрий
            27 января 2019, 11:44
            0
            Код сниппета 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;
            Что тут нужно изменить/добавить?
              Дмитрий
              27 января 2019, 13:05
              0
              Не знаю на сколько это правильно, но сделал так и все работает.

              <?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',


              Правильно я сделал, или есть более оптимальный вариант?
                Дмитрий
                27 января 2019, 23:12
                0
                Или так:
                <?php
                //..........
                foreach($tags as $tag) {
                		array(			
                		    $tagLink[] = '<a href="' . $tags_page . $tag['value'] . '/">' . $tag['value'] . '</a>'
                		);
                	}
                	
                return implode(', ', $tagLink);
                  Баха Волков
                  29 января 2019, 12:02
                  0
                  Для гибкости и универсальности можно было бы оставить свойство tpl и добавить еще и свойство outputSeparator, а в сниппете использовать его
                    Дмитрий
                    29 января 2019, 22:44
                    0
                    На счет свойства outputSeparator — согласен — для гибкости, в вызове сниппета можно менять разделитель.

                    Сделал так:
                    <?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 все это работает.

                    Заранее, благодарю.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        13