CMS DataLife Engine - Система управления сайтами

Colonizator

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

Recommended Posts

Сайт 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"}

 

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

Edited by Colonizator

Share this post


Link to post
Share on other sites
$xf = explode("/",$_GET['xf'] );
$xfield = end($xf);

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Открыть файл /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__"

  • Thanks 1

Share this post


Link to post
Share on other sites
4 часа назад, alex32 сказал:

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

 

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

 

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

 

Edited by Colonizator

Share this post


Link to post
Share on other sites
В 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; ?

Share this post


Link to post
Share on other sites
42 минуты назад, Colonizator сказал:

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

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

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

 

Замените это

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

На это

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

 

  • Like 2

Share this post


Link to post
Share on other sites
В 09.07.2019 в 12:49, Colonizator сказал:

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

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

 

В 11.07.2019 в 17:55, Gameer сказал:

Замените это


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

На это


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

Вот это мелочь такая, а заметили! Молодцы.

Share this post


Link to post
Share on other sites
4 часа назад, redisl сказал:

 

Вот это мелочь такая, а заметили! Молодцы.

Чего?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.