Evgeny

Ссылка c наименования ЖК в объявлениях

Recommended Posts

Всем привет.

Сайт gm36.ru

Требуется сделать ссылку c характеристики объявления "Жилой комплекс", точнее одного из параметров таблиц структуры data -> complex_id . Сейчас он выводится в виде текста, а надо чтоб был ссылкой на ЖК

Скрин: http://prnt.sc/em0vj0

 

064f9b7210ee4c40a1d0727dd1ef0432.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если количество ЖК в базе не исчисляется сотнями, то:

1. В main.php в папке шаблона внутри класса class frontend_main extends SiteBill_Krascap создаем функцию

function preloadComplexAliases(){
	$cache_time=86400; //1 сутки
	$aliases=array();
	$cache_file=SITEBILL_DOCUMENT_ROOT.'/cache/cache.local.complex_alias.txt';
	
	if(file_exists($cache_file) && (time()-filemtime($cache_file))<$cache_time){
		$aliases=unserialize(file_get_contents($cache_file));
	}else{
		if(file_exists($cache_file)){
			unlink($cache_file);
		}
			
		$aliases=array();
		if(1==(int)$this->getConfigValue('apps.seo.no_trailing_slashes')){
			$trailing_slashe='';
		}else{
			$trailing_slashe='/';
		}
		$DBC=DBC::getInstance();
		$query='SELECT complex_id, url FROM '.DB_PREFIX.'_complex';
		$stmt=$DBC->query($query);
		if($stmt){
			while($ar=$DBC->fetch($stmt)){
				if($ar['url']!=''){
					$aliases[$ar['complex_id']]=SITEBILL_MAIN_URL.'/'.$this->getConfigValue('apps.complex.alias').'/'.$ar['url'].$trailing_slashe;
				}
				
			}
		}
		$f=fopen($cache_file, 'w');
		fwrite($f, serialize($aliases));
		fclose($f);
	}
	return $aliases;
}

которая будет отдавать нам массив в котором ключем будет идешка жк, а значением по этому ключу - ссылка на него. Функция будет кешировать данные в текстовый файл на срок $cache_time=86400; //1 сутки. Если ЖК меняются-добавляются у вас чаще, то можно сделать это значение поменьше.

2. внутри функции main()  в этом же файле делаем заброс этих данных в шаблон

$this->template->assert('complex_aliases', $this->preloadComplexAliases());

это можно разместить в самом начале функции, но не выше строки global $__site_title, $folder, $smarty;

3. Теперь в любом шаблоне фронта вы можете использовать переменную

{$complex_aliases}

если в этом случае у вас доступна идешка ЖК. Например в карточке это может выгядеть так

{if $data.complex_id.value>0}
	{if isset($complex_aliases[$data.complex_id.value])}
    <a href="{$complex_aliases[$data.complex_id.value]}">{$data.complex_id.value_string}</a> {*выводим название в виде ссылки*}
    {else}
    {$data.complex_id.value_string} {*ссылки по каким-то причинам нет, выводим только название*}
    {/if}
{/if}

Почти аналогично это будет выглядеть и в шаблоне списка.

Таким нехитрым способом с минимальным кешированием мы можем обеспечить себя каким-то дополнительными сквозными данными в шаблоне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

сделал всё по вашей инструкции:

получилось, но не то что нужно ((

добавил:
1. и 2.  в файл gm36.ru/template/frontend/realia/main/main.php
3. код в realty_view.tpl 
вставил после: 
 {foreach from=$hvd_tabbed item=tab key=tabname} 

Название ЖК выводит, но не совсем там где нужно )  и в виде текста а не ссылки

Подскажите где мои ошибки.

p/s . в п.3. предпоследний if надо закрыть -  {/if} 

 

jk001.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 06.04.2017 в 00:20, abushyk сказал:

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

Костя, а что будет если ЖК в итоге будет в районе тысячи, но ссылка бы очень даже не помешала бы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда будет логичнее не подгружать алиасы "на всякий случай" и использовать в шаблоне, а вынести его выборку в модуль карточки, где он будет выбираться и передаваться только тогда, когда запрошена карточка, и тогда передавать его в шаблон вместе с данными о объекте. Это так же будет более рациональным, если ссылки используются только в карточках, но не используются в тех же списках объектов.

Плюс можно оптимизировать будет выборку алиасов. Не брать их сразу все и хранить какое-то время, а брать только запрощенные и сохранять, а новые добавлять в эту сохраняемую коллекцию, которую очищать в случае а) истечения времени хранения, б) при достижении нею некоторого пограничного значения (например на сохранении уже стоит 1000 ссылок, значит можно сбросить все и начать собирать наново). Но это в теории. Такую оптимизацию нужно делать по результатам хотя бы метрики, что бы понимать насколько разные ЖК смотрят люди и насколько часто вообще открываются карточки, где используются эти алиасы.

Поделиться сообщением


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

Тогда будет логичнее не подгружать алиасы "на всякий случай" и использовать в шаблоне, а вынести его выборку в модуль карточки, где он будет выбираться и передаваться только тогда, когда запрошена карточка, и тогда передавать его в шаблон вместе с данными о объекте. Это так же будет более рациональным, если ссылки используются только в карточках, но не используются в тех же списках объектов.

Плюс можно оптимизировать будет выборку алиасов. Не брать их сразу все и хранить какое-то время, а брать только запрощенные и сохранять, а новые добавлять в эту сохраняемую коллекцию, которую очищать в случае а) истечения времени хранения, б) при достижении нею некоторого пограничного значения (например на сохранении уже стоит 1000 ссылок, значит можно сбросить все и начать собирать наново). Но это в теории. Такую оптимизацию нужно делать по результатам хотя бы метрики, что бы понимать насколько разные ЖК смотрят люди и насколько часто вообще открываются карточки, где используются эти алиасы.

Спасибо Костя. Думаю этот вариант рационален, только как это воссоздать в реальность?

Если честно, я пока не тороплюсь еще делать и делать модуль ЖК под себя, полностью верстку хочу передать и т.д. Так что может к тому времени уже придумается какой нибудь вариант.

Потому что это очень удобно, человек зашел например с поиска или с поисковой системы на объект, увидел ссылку комплекса, перешел и полностью уже ознакомился со всеми деталями, а так же увидел что имеется на данный момент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: banzai72
      Это так должно быть?
      Или это у меня так?
      Может это в шаблоне дело?
      Использовать умную подгонку превьюшек было включено ещё до загрузки изображений. Не помогает.

    • Автор: banzai72
      Я не использую карты гугла на сайте. Люблю Яндекс. Поэтому галочка use_google_map в настройках снята
      А приложение ЖК использует карту гугл
      Поэтому при снятом чекбоксе use_google_map пустое место
      Посоветуйте пожалуйста, что и где поменять, что бы в приложении complex появилась карта

    • Автор: Chernetskiy
      Решил добавить в верхнее меню ЛК позицию "ЛК в Яндекс.Недвижимость" (ссылка на сторонний ресурс для администратора), чтобы не копаться в дебрях Яндекса. Понятное дело, решил прилепить к ней target="_blank", и попутно, наткнулся на статью о небезопасности подобного решения...
      Поскольку похожих ссылок на сайте достаточно и логично сделать переход на сторонние ресурсы через промежуточную стрнаницу с текстом типа: "Вы переходите на сторонний ресурс, кликните на ссылку (ссылка на ресурс) или вы будете переадресованы автоматически через 3 сек." Но клиентов обычно это напрягает, куда-то дополнительно кликать, чего-то ждать...
      Решил воспользоваться решением проблемы через rel="noopener" и пока ссылки в user_menu.tpl выглядят так (может кому пригодится):
      {if $smarty.session.current_user_group_name eq 'admin'} <li><a title="Раздел Администратора" href="{$estate_folder}/admin/">АДМИНКА</a></li> <li><a title="Личный кабинет в Яндекс.Недвижимость" href="https://compartner.realty.yandex.ru/feeds?from=email_wm_lk" target="_blank" rel="noopener">ЯН</a></li> {/if} <li><a title="Добавить новое объявление" href="{$estate_folder}/account/data/?do=new">{$L_ADD_ADV}</a></li> <li><a title="Мои объявления" href="{$estate_folder}/account/data/">{$L_MY_ADVS}</a></li> {if $mysearch_panel ne ''}<li><a title="Мой поиск" href="{$estate_folder}/mysearch/">{$mysearch_panel}</a></li>{/if} {if $mailbox_panel ne ''}<li><a title="Мои сообщения" href="{$estate_folder}/mailbox/">{$mailbox_panel}</a></li>{/if} {if $app_company_namespace ne ''}<li><a title="Мои компании" href="{$estate_folder}/{$app_company_namespace}/my/">Мои компании</a></li>{/if} {if $realtylogv2_on==1}<li><a title="Корзина" href="{$estate_folder}/{$realtylogv2_namespace}/trash/">Корзина ({$trash_count})</a></li>{/if} <li><a title="Мой баланс" href="{$estate_folder}/account/balance/">{$L_MY_BALANCE} {$ballance} ₽</a></li> <li><a title="Мой профиль" href="{$estate_folder}/account/profile/">{$L_MY_PROFILE}</a></li> Но остается вопрос, как правильнее поступить, чтобы не получать частичный контроль над своими ссылающимися страницами через js свойство window.opener со стороны сторонних страниц, на которые осуществляется переход? Я наблюдаю, что тот-же Вордпресс последние полгода автоматически цепляет ко всем внутренним и внешним ссылкам на страницах сайта rel="noopener"...
    • Автор: Realtor
      Добрый день всем,

      необходимо создать поэтажный справочник цен за кв.м.  к приложению Жилые комплексы с привязкой к определенному жилому комплексу.
      в справочнике указывается цена кв.м.  и цена кв.м. по акции привязанная к жилому комплексу и этажу и срок(дата) действия акции.
      при выводе цен в таблице data рассчитывается общая площадь умножаем на цену кв.м. из справочника в зависимости от указанного этажа объекта и получаем общую цену объекта. В случае если указана цена по акции и удовлетворяет сроку действия акции, то перечеркивается общая цена и показывается с значком Акция акционная цена объекта. 
      Предложения по цене разработки в личку.
       
       
    • Автор: Realtor
      Добрый день,
      Подскажите как вывести в ЛК пользователя наименование ЖК, корпуса и секции?