Дмитрий

Дмитрий

Был в сети 16 сентября 2021, 01:30
Заказы не принимаю
Код сниппета 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;
Что тут нужно изменить/добавить?
Благодарю. На этом варианте остановлюсь.

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

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

А в самом облаке облаке тегов все теги сайта вывожу так:
{$_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 ....
Василий, подскажи еще следующее.

В стандартной пагинации, если
'setMeta' => 1
то rel=«canonical», если находишся на любой странице пагинации выглядит следующим образом:
<link rel="canonical" href="https://mysite.ru/category/"/>
то есть ведет на каноническую страницу.

А после переделки на «человекопонятную навигацию» при нахождении на странице пагинации, например, на 3 странице, выглядит следующим образом:
<link rel="canonical" href="https://mysite.ru/category/page/3/"/>
то есть ведет на текущую страницу.

Подскажи, возможно ли в плагине что-то изменить или добавить (и что именно), чтобы rel=«canonical» при нахождении на любой странице пагинации вел на каноническую страницу пагинации, вот так:
<link rel="canonical" href="https://mysite.ru/category/"/>
Или это в плагине не сделать, то тогда каким образом это реализовать?

Ранее задавал этот вопрос
вот здесь, но не было времени разбираться и пока отложил на потом. Сейчас пришло время добить эту тему до конца.
Там Rasul предложил решение, но думаю есть другое, более гибкое решение.
Василий, а можно подробнее, а то не очень давно познакомился с MODX.
То есть создать сниппет с редиректом и вызвать его после pdoPage, то есть пагинации?

Соответственно в сниппете получить количество страниц с помощью:
$modx->getPlaceholder('pageCount');
так???
Проблема в том, что у разных категорий могут быть свои шаблоны, это придется там где пагинация, прописывать каждый раз в шаблоне.
Хочется сделать в одном месте и там где пагинация, чтобы это включалось.

Думаю, как-то в плагине надо прописать условие, что если это rel=«canonical» то не применять /page/№/
По крайнему Вашему варианту на любой странице в коде вот это:
<link rel="canonical" href="https://mysite.ru/uslugi/" />
<link rel="prev" href="https://rmysite.ru/uslugi/">
<link rel="next" href="https://mysite.ru/uslugi//page/-1">

Спасибо за участие, но думаю предложенная концепция не подойдет, так как 3 эти мета-тега постоянно будут в исходном коде. В то время как при нахождении на первой и последней странице должно быть 2 мета-тега.

То есть,
если находиться на 1 странице должно быть:
<link rel="canonical" href="https://rmysite.ru/uslugi/"/>
<link rel="next" href="https://rmysite.ru/uslugi/page/2/"/>
Если находиться на последней (3-последняя страница), то должно быть:
<link rel="canonical" href="https://rmysite.ru/uslugi/"/>
<link rel="prev" href="https://rmysite.ru/uslugi/page/2/"/>

Поэтому без правки php кода, думаю, не обойтись.
У меня сейчас:
<link rel="canonical" href="https://mysite.ru/category/page/2/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>

Хочу чтобы было:
<link rel="canonical" href="https://mysite.ru/category/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>

Если делать по Вашему варианту, отключить регистрацию мета-тегов — &setMeta=`0` и в head прописать:
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
то останется только:

<link rel="canonical" href="https://mysite.ru/category/"/>
Страницу с облаком /tags/ сделал, теги выводятся, схема URL правильная:
site.ru/tags/определенный+тег/

Однако из статьи
bezumkin.ru/sections/tips_and_tricks/2918/ не совсем понятно как применить все описанное к данному случаю.

Не сочтите за наглость, опишите это пожалуйста для далёких (пока) новичков в MODX и не особо знающих php, а именно можете дать код плагина, который это делает (кастомную маршрутизацию).

Я так понимаю на него надо будет повесить событие OnPageNotFound

Заранее, благодарю!
2. Кастомной маршрутизацией по шаблону /tags/{item} присваивается плейсхолдер и sendForward-ится на страницу из пункта 1.
Можно этот пункт поподробнее, недолго знаком с MODX, да и в php не особо силен.
pdoPage (БЕЗ ПЕРЕДЕЛКИ ПО ВЫШЕУКАЗАННОЙ ИНСТРУКЦИИ) регистрирует в head если находиться, например, на 2 странице:
<link rel="canonical" href="https://mysite.ru/category/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/?page=3"/>
Я переделал по инструкции, с rel=«prev» и rel=«next» все нормально, выводит правильно, а rel=«canonical» выводится таким образом, что на какой бы странице не находился, канонический адрес указывает на текущую страницу, а не на главную страницу категории.
Надо сделать, чтобы было как до переделки, чтобы rel=«canonical» указывал на страницу категории без page№

Где-то в коде плагина надо внести изменения, но к сожалению не особо силен в php, конечно если «долго мучиться, что нибудь получится», по крайней мере всегда получалось если ответа не находилось.