Перейти к публикации

Как вытащить значение xfields из url ?


Рекомендованные сообщения

Сайт mapswater.com

На сайте есть карта с метками (координаты каждой метки лежат в доп.поле у каждой новости). В коде шаблона метки выводятся через custom напрямую в js скрипт, который подключает яндекс карты.

{custom template="placemark" categoryexclude="30" limit="1000" navigation="no"}

 

Для категорий использую вот такой вывод: {custom template="placemark" category="{category-id}" categoryexclude="30" limit="1000" navigation="no"} - так, на карте выводятся метки тех новостей, которые присвоены просматриваемой категории.

 

Однако на сайте основным типом контента - это страницы доп.полей с типом перекрестные ссылки: например https://mapswater.com/xfsearch/places/река+Березина/

И вот на таких страницах я также хочу вывести карту от яндекса, и показать только те метки, которые относятся к новостям, у которых доп.поле places содержит значение "река Березина" и т.д. в зависимости от того, какой урл просматривает юзер.

Может есть какой-то очевидный способ сделать это стандартными средствами движка? Я не нашел и начал мудрить:

 

В этом коде: {custom xfields="значение_поля" template="placemark" categoryexclude="30" limit="1000" navigation="no"}

вместе значение_поля нужно подставить значение доп. поля из url

 

Вытащил то, что мне нужно из url вот этим кодом:

<?php
$url = rawurldecode($_SERVER['REQUEST_URI']);
$url_one = htmlspecialchars(str_replace("/", '', $url));
$url_two = str_replace("+", ' ', $url_one);
$xfield = str_replace("xfsearchplaces", '', $url_two);
echo $xfield;
?>

Запихнул его в файл в папке engine/modules/mymod/mymod.php

И пробую сделать вот такое чудо: {custom xfields="{include file='engine/modules/mymod/mymod.php'}" template="placemark" categoryexclude="30" limit="1000" navigation="no"} - но оно не срабатывает :(.

Тег не обрабатывается и в html улетает вот такая строка:

" template="placemark" categoryexclude="30" limit="1000" navigation="no"}

 

Подскажите, кто знает - что не так?

Изменено пользователем Colonizator
Ссылка на сообщение
Поделиться на других сайтах

Открыть файл /engine/modules/functions.php найти

if( preg_match( "#xfields=['\"](.+?)['\"]#i", $param_str, $match ) ) {

Ниже вставить

if ($match[1] == '__this__' && $dle_module == 'xfsearch') {
	global $xf,$xfname;
	if ($xf && $xfname) {
		$match[1] = $xfname . '|' . $xf;
	}
}

 

В custom использовать xfields="__this__"

Ссылка на сообщение
Поделиться на других сайтах
4 часа назад, alex32 сказал:

$xf = explode("/",$_GET['xf'] );
$xfield = end($xf);

 

да, ваш код определенно симпатичнее, только суть в том, что и мой выводит то, что мне нужно - проблема, в фигурных скобках, тег custom видит закрытую скобку и пытается это все обработать, а как еще подключить внутрь {custom} свой php файл я не знаю.

 

@Gameer, спасибо, работает как нужно! 

 

Изменено пользователем Colonizator
Ссылка на сообщение
Поделиться на других сайтах
В 09.07.2019 в 17:42, Gameer сказал:

Открыть файл /engine/modules/functions.php найти


if( preg_match( "#xfields=['\"](.+?)['\"]#i", $param_str, $match ) ) {

Ниже вставить


if ($match[1] == '__this__' && $dle_module == 'xfsearch') {
	global $xf,$xfname;
	if ($xf && $xfname) {
		$match[1] = $xfname . '|' . $xf;
	}
}

 

В custom использовать xfields="__this__"

Заметил небольшой косяк. Если перейти по ссылке в которой значение доп.поля - второе в списке (в доп поле лежит строка "Охотское море, Ульбанский залив") https://mapswater.com/xfsearch/places/Ульбанский+залив/

То соответственно в __this__ отдается что-то другое, и тег custom ничего не выводит. Пытался ковырять - не выходит. Есть способ исправить? Или может подскажете, что лежит в переменных $xf,$xfname; ?

Ссылка на сообщение
Поделиться на других сайтах
42 минуты назад, Colonizator сказал:

Заметил небольшой косяк. Если перейти по ссылке в которой значение доп.поля - второе в списке (в доп поле лежит строка "Охотское море, Ульбанский залив") https://mapswater.com/xfsearch/places/Ульбанский+залив/

То соответственно в __this__ отдается что-то другое, и тег custom ничего не выводит. Пытался ковырять - не выходит. Есть способ исправить? Или может подскажете, что лежит в переменных $xf,$xfname; ?

Попробуйте это.

 

Замените это

$match[1] = $xfname . '|' . $xf;

На это

$match[1] = $xfname . '|%' . $xf;

 

Ссылка на сообщение
Поделиться на других сайтах
  • 2 месяца спустя...

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...