revtail

Отдельная страница всех агентов

Recommended Posts

Прочитал тему http://www.etown.ru/s/topic/797-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BB%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0-%D0%B0%D0%B3%D0%B5%D0%BD%D1%82%D0%BE%D0%B2/

Там обсуждался вывод всех агентов в определенное место в шаблоне.

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

 

{include file='list.tpl'} - прекрасно работает на любой страничке

 

Объясните методику создания таких страничек в этой CMS

Спасибо!

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


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

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

Если же вы хотите, что бы данные для списка брались напрямую из БД, т.е. динамично, то вариант со статичными страницами не подходит. В таком случае просто следует зарезервировать роут под эту страницу в файле main.php и под него вызывать функцию, которая создаст нужный вам список+подключит его вывод. Такие решения есть, например тут http://an-pdm.ru/workers , но они, в данный момент, не являются коробочными (их нет в базовой установке шаблонов).

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


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

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

Если же вы хотите, что бы данные для списка брались напрямую из БД, т.е. динамично, то вариант со статичными страницами не подходит. В таком случае просто следует зарезервировать роут под эту страницу в файле main.php и под него вызывать функцию, которая создаст нужный вам список+подключит его вывод. Такие решения есть, например тут http://an-pdm.ru/workers , но они, в данный момент, не являются коробочными (их нет в базовой установке шаблонов).

Конечно вариант с динамикой. Как я понял из темы "Листинга Агентов", то список из БД уже выбирается и он действительно работает на страницах сайта. т.е. выбираются все агенты в список на странице. Вопрос как подключить его вывод на отдельную страницу. ..... или это "платная информация"  :)  :)

Спасибо

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


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

Нет, если подсказать, то бесплатно)

 

Например, на примере шаблона realia.

 

В main.php необходимо поймать адрес на котором будут выводиться ваши агенты\пользователи. Пусть это будет agents.

 

Ставим в упомянутом файле внутри функции main() условие

if ( !$has_result && preg_match('/^agents[\/]?$/', $REQUESTURIPATH) ) {$this->userlist();$has_result=true;}

Т.е. поймали урл  который начинается с agents и заканчивается ничем либо слешем, внутри запустили функцию userlist и сообщили движку, что ситуацию мы обработали и можно выводить страницу ($has_result=true;).

 

Далее остается написать функцию userlist, которая должна

1. Выбрать из таблицы юзеров нужных для вывода, например всех, кроме админа и еще какие-то условия.

2. Каким-то образом проинициализировать данные для этих пользователей (если модель юзеров содержит ссылочные поля и они нужны при выводе, то с помощью инициализаторов модели Data_Model::init_from_db(), если нужны примитивные данные, то даже просто запросом в БД, который одним махом выхватит все нужные данные).

3. Отправить это все в шаблон вывода

$this->template->assert('users', $users);
$this->template->assert('main_file_tpl', 'userlist.tpl');
4. Заверстать шаблон userlist.tpl который красиво оформит вывод данных из переданных в {$users}
 
После этого движек вставит в место вывода контента файл userlist.tpl и отрисует его.

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


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

Могу ли я переделать вариант из предыдущей темы т.е. 

 

мы вставили в блок main

if ( !$has_result && preg_match('/^agents[\/]?$/', $REQUESTURIPATH) ) {$this->userlist();$has_result=true;}

Потом как в предыдущей теме в класс class frontend_main

вставляю

private function userlist(){
	if(isset($_SESSION['users'])){
		return $_SESSION['users'];
	}
	$ret=array();
	$DBC=DBC::getInstance();
	$query='SELECT COUNT( d.id ) AS _cnt, u.user_id, u.fio, u.phone, u.imgfile FROM  `re_data` d LEFT JOIN re_user u USING ( user_id ) WHERE u.group_id IN ( 2, 3 ) GROUP BY d.user_id ORDER BY _cnt DESC';
	$stmt=$DBC->query($query);
	if($stmt){
		while($ar=$DBC->fetch($stmt)){
			$ret[]=$ar;
		}
	}
	$_SESSION['users']=$ret;
	return $ret;
}

Функцию называю конечно userlist

Вопрос, как мне сделать вывод в шаблон и прокатит ли такой userlist.tpl 

{if $users|count>0}			<div class="widget our-agents">			    <div class="title">			        <h2>{$L_OURAGENTS}</h2>			    </div>							    <div class="content">			    {foreach from=$users item=oneagent}			        <div class="agent">			            <div class="image">			            {if $oneagent.imgfile!=''}			                <img src="{$estate_folder}/img/data/user/{$oneagent.imgfile}">			            {else}			            	<img src="{$estate_folder}/template/frontend/{$current_theme_name}/img/userplaceholder.png">			            {/if}			            </div>			            <div class="name"><a href="{$estate_folder}/user{$oneagent.user_id}.html">{$oneagent.fio}</a></div>			            <div class="phone">{$oneagent.phone}</div>			            <div class="email">Всего объявлений: {$oneagent._cnt}</div>			        </div>				{/foreach}			    </div>			</div>		{/if}

Извините за тупость, но хочется самому разобраться. Благодарю за помощь

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


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

Все норм, только функцию я бы чуть переписал

private function userlist(){
	$users=array(); //массив юзеров
    if(isset($_SESSION['users']) && is_array($_SESSION['users'])){
    	$users=$_SESSION['users'];
	}
	if(count($users)<1){
		$DBC=DBC::getInstance();
		$query='SELECT COUNT( d.id ) AS _cnt, u.user_id, u.fio, u.phone, u.imgfile FROM  `re_data` d LEFT JOIN re_user u USING ( user_id ) WHERE u.group_id IN ( 2, 3 ) GROUP BY d.user_id ORDER BY _cnt DESC';
		$stmt=$DBC->query($query);
		if($stmt){
			while($ar=$DBC->fetch($stmt)){
			$users[]=$ar;
		}
	}
	$_SESSION['users']=$users;
}
$this->template->assert('users', $users);
$this->template->assert('main_file_tpl', 'userlist.tpl');
}

т.е. не возвращаю из нее ничего, а сразу задаю файл шаблона и там же в шаблон кладу юзеров.

 

Тогда и userlist.tpl должен отработать на ура.

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


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

А идею с кешем списка юзеров в сессии ($users=$_SESSION['users'];) сами придумали или где-то стырили?

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


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

Я просто додумал мысль человека, который хотел список всех агентов)) А Вас спасибо за помощь, с меня коньяк  :)

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


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

http://an-pdm.ru/workers 

В 12.10.2014 в 12:09, abushyk сказал:

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

Если же вы хотите, что бы данные для списка брались напрямую из БД, т.е. динамично, то вариант со статичными страницами не подходит. В таком случае просто следует зарезервировать роут под эту страницу в файле main.php и под него вызывать функцию, которая создаст нужный вам список+подключит его вывод. Такие решения есть, например тут http://an-pdm.ru/workers , но они, в данный момент, не являются коробочными (их нет в базовой установке шаблонов).

http://an-pdm.ru/workers   - шикарный вариант! как реализовать такой же с карточками своих же сотрудников, т.е. риэлторов, без сторонних пользователей и агентов?

Либо две категории, например в системе есть Кредитные специалисты и Специалисты по недвижимости.

Попробовал вариант вывода описанного в топике, после установки строки:

if ( !$has_result && preg_match('/^agents[\/]?$/', $REQUESTURIPATH) ) {$this->userlist();$has_result=true;}

все отваливается( белая страница

 

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


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

а такую функцию создали в main.php ? В ядре ее нет, так что попытка ее вызвать приведет к падению.

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


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

userlist()

а такую функцию создали в main.php ? В ядре ее нет, так что попытка ее вызвать приведет к падению.

Это 

private function userlist(){if(isset($_SESSION['users'])){return $_SESSION['users'];}$ret=array();$DBC=DBC::getInstance();$query='SELECT COUNT( d.id ) AS _cnt, u.user_id, u.fio, u.phone, u.imgfile FROM  `re_data` d LEFT JOIN re_user u USING ( user_id ) WHERE u.group_id IN ( 2, 3 ) GROUP BY d.user_id ORDER BY _cnt DESC';$stmt=$DBC->query($query);if($stmt){while($ar=$DBC->fetch($stmt)){$ret[]=$ar;}}$_SESSION['users']=$ret;return $ret;}

И это, в общем, все делал, как в этом топике

if ( !$has_result && preg_match('/^agents[\/]?$/', $REQUESTURIPATH) ) {$this->userlist();$has_result=true;}

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


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

Не правильно, userlist нужно вызывать в функции main. Лучше где-то после global

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


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

Вы это имеете ввиду?


$this->template->assign('agents_list', $this->getAgentsListing());

В принципе да. Только вместо getAgentsListing использовать userlist .

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


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

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

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

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

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

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

Войти

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

Войти сейчас