Forumlar / National / Russian / Сборка «Фриланс-биржа» / Вопрос по переменным в cot_getfoliolist

Kopusha
#1 2018-08-10 15:31

С помощью function cot_getfoliolist($template = 'index', $count = 5, $sqlsearch = '', $order = "item_date DESC")
я могу в отдельном фолио выводить похожие фолио по условию. К примеру 
{PHP.item.item_city|cot_getfoliolist('from-location', 4, 'item_city=$this', "item_rating_real DESC")} - поймай локацию фолио и выведи еще 4 по шаблону from-location из этого же города. Все ок. Но хочется исключить из этой выборки саму себя. Что то наподобии item_id != {PRD_ID}, но два $this не будут работать.

В самой функции cot_getfoliolist я добавил 

$id = cot_import('id', 'G', 'INT'); (Вот тут я понимаю что скорее всего я не получаю реальное ID записи а всего лишь беру "текущее ID", как то так?)
$where_condition .= " AND item_id != $id";
и в $sqllist = $db->query добавил $where_condition

Все великолепно работает когда обращаешся к фолио по его ID (/folio/nature/198). Но если обратится по alias (/folio/nature/lena2) то естественно не работает. 

Подскажите как с этим навести порядок? 

Добавлено 18 минут спустя:

UPD
Сделал, не уверен что это оптимально.

{PRD_ID|get_item_city_and_id($this)|cot_getfoliolist('from-location', 4, 'item_id!=$this', "item_rating_real DESC")}

 

function get_item_city_and_id($item_id){
        global $db, $db_folio;
        $string = '';
        
		if($item_id){
			$string = $db->query("SELECT item_id FROM $db_folio WHERE item_id=".$item_id)->fetchColumn();
			$string = (int)$string;
		}
        
		if($item_id){
			$city = $db->query("SELECT item_city FROM $db_folio WHERE item_id=".$item_id)->fetchColumn();
			$string .= " AND item_city = $city";
		}
		return $string;
}

 


Bu konu Kopusha tarafından düzenlendi(2018-08-30 10:10, 5 yıllar önce)
verotela
#2 2018-08-30 19:13

Такое не через шаблонизатор надо делать.

Используя нужные хуки создаете нужные теги... В php сможете прописать и id и любое другое условие выборки

Kopusha
#3 2018-08-30 23:54

Почему?

verotela
#4 2018-09-01 10:25
#43680 Kopusha:

Почему?

Ответ в вашем же вопросе )

Не надо было бы писать доп функцию ( что вы и сделали ) и + не было бы лишнего запроса к БД.

Kopusha
#5 2018-09-01 10:59

То есть изменить под себя саму функцию cot_getfoliolist? А не менять функцией данные которые я кормлю в неё?

ПС насколько я понимаю оно же все кешируется?

verotela
#6 2018-09-01 23:19
#43683 Kopusha:

То есть изменить под себя саму функцию cot_getfoliolist? А не менять функцией данные которые я кормлю в неё?

ПС насколько я понимаю оно же все кешируется?

Нет!

С хуками знакомы?

Создаете php файлик для нужного хука, туда пишите тег в который выводите требуемое - в вашем случае функция foliolist с заданием требуемых условий.

Через хук вам будет доступна переменная $item

$item['item_id']

$item['item_city']

И нет вам доп запроса )

 

В вашем случае хук folio.tags