Борис И

Борис И

Был в сети 15 января 2023, 17:28
Заказы не принимаю
Максим Кузнецов
Максим Кузнецов
Если честно, я и прелести tagLister'a не оценил — он уж на случай крайней лени, как по мне.

Вот как реализованы теги у меня (может, кому пригодится):

1. Дополнительное поле «tags»
Параметры ввода: Авто-метка (можно и простой строкой, по желанию)

2. Сниппет «tags», делающий теги ссылками (для последующего поиска по ним)
<?php
	if ($input == ''){
		return;
	}
	$tags = explode(',',$input);
	foreach ($tags as $key => $value){
		$output[] = '<a href="'.$modx->makeurl($tagsPage, '').'/'.$value.'" itemprop="keywords">'.$value.'</a>'; 
	} 
	return implode(', ',$output);

3. Вывод в чанке
[[*tags:notempty=`
<div class="tagList" itemscope itemtype="http://schema.org/CreativeWork">
	[[!tags? &tagsPage=`91` &input=`[[*tags]]`]]
</div>
`]]
— где &tagsPage — параметр, определяющий айди страницы поиска по тегам для формирования ссылки

Ну и дополнительно, для «полного спектра услуг»:

4. Создаем страницу "Поиск по тегам" с псевдонимом tag, где будем выводить все теги, удовлетворяющие запросу:
[[!pdoPage &parents=`0` &includeContent=`1` &where=`{"tags:LIKE":"%[[!GET? &get=`tag`]]%"}` &includeTVs=`tags` &limit=`10` &sortby=`createdon` &sortdir=`DESC` &depth=`1` &tpl=`tag.Item`]]
— где сниппет GET перехватывает выбранный тег в адресной строке.

GET
<?php
	return $_GET[$get];

5. Дописываем .htaccess, чтобы адресная строка поиска приняла вид site.ru/tag/Название_тега
RewriteRule ^tag/([^/]+)$ /tag?tag=$1 [L]
Василий Наумкин
Василий Наумкин
несколько станций метро через запятую таким же способом то все ломается
Потому что станции метро — текст и через запятую они должны быть вместе с ковычками.

Вместо
текст, текст, текст
должно быть
"текст","текст","текст"
Числа в ковычки помещать не нужно, поэтому цена работает. Если включить showLog=`1`, то ты увидишь ошибку выполнения SQL запроса.
wld
wld
или же не указываем
<base href="[[++base_url]]" />
а в Настройках системы — core — Сайт
Схема URL (link_tag_scheme) установить значение abs
Для справки:
-1: (default value) URL is relative to site_url
0: see http
1: see https
full: URL is absolute, prepended with site_url from config
abs: URL is absolute, prepended with base_url from config
http: URL is absolute, forced to http scheme
https: URL is absolute, forced to https scheme

И при вызове pdoMenu или подобных снипетов указывать:
&scheme=`abs`
По идее, в подобных снипетах можно было бы дергать эту схему урл по дефолту из link_tag_scheme, но почему то так не все так делают(

Отличия:
В первом случае, как указал Василий, при создании якорей, необходимо указывать ссылку на текущую страницу:
<a href="[[~id]]#test">Ссылка</a>
В моем случае, достаточно указать только якорь:
<a href="#test">Ссылка</a>