Александр
+731
Репутация
15744
Рейтинг
Смотри у меня в блоге решение этой головоломки

Вопрос примерно то-же: Как сделать фильтр по двум критериям одновременно: по ФАКУЛЬТЕТУ и по ГОДУ ПОСТУПЛЕНИЯ В ИНСТИТУТ (или окончания)?!
Задача: Искать людей с Факультетом и датой поступления. Необходимо совпадение обоих полей.
РЕШЕНИЕ:
Добавим поиск по дате поступления.
Заходим в конструктор форм-анкета пользователя-поля-создаем выпадающий список "дата поступления" с полями
2000/2001/2002/2003/2004/2005/2006/2007/2008/2009/2010
(! тут уже создано поле факультет, кстати!)
В components\users\router.php добавим новое правило:
после
//RewriteRule ^users/hobby/(.*)$ /index.php?view=users&do=hobby&hobby=$1 '_uri' => '/^users\/hobby\/(.+)$/i', 'do' => 'hobby', 1 => 'hobby' );
//Новое правило для поиска пользователей '_uri' => '/^users\/facultet.html$/i', 'do' => 'facultet', 1 => 'facultet' );
components\users\frontend.php после
////////////////////////////// SEARCH BY HOBBY (description part) //////////////// if ($do=='hobby'){ $hobby = $inCore->request('hobby', 'str', ''); $querysql = "SELECT u.*, p.*, u.id as id, u.regdate as fregdate, u.logdate as flogdate FROM cms_users u, cms_user_profiles p WHERE u.is_locked = 0 AND p.user_id = u.id AND (LOWER(p.description) LIKE '%$hobby%' OR LOWER(p.formsdata) LIKE '%$hobby%') AND u.is_deleted = 0 ORDER BY city DESC"; if ($hobby == 'facultet1') {$hobby = 'Математика';} if ($hobby == 'facultet2') {$hobby = 'Биология';} if ($hobby == 'facultet3') {$hobby = 'Физика';} if ($hobby == 'facultet4') {$hobby = 'Геология';} if ($hobby == 'facultet5') {$hobby = 'Экономика';} $querymsg = '<div class="con_description"><strong>'.$_LANG['SEARCH_BY_HOBBY'].':</strong> '.$hobby.' (<a href="/users/all.html">'.$_LANG['CANCEL_SEARCH_SHOWALL'].'</a>)</div>'; $do = 'view'; }
////////////////////////////// Поиск по факультету / Год поступления ////////////// if ($do=='facultet'){ $year = $inCore->request('year', 'str', ''); $facultet = $inCore->request('fac', 'str', ''); $str=''; $value=''; $fac=''; if($inCore->request('year')) { $year = $inCore->request('year', 'str', ''); $value = 'Год поступления '.$year;}; if($inCore->request('fac')) { $facultet = $inCore->request('fac', 'str', ''); }; if(($inCore->request('year'))&&($inCore->request('fac'))) {$str=' / '; } $querysql = "SELECT u.*, p.*, u.id as id, u.regdate as fregdate, u.logdate as flogdate FROM cms_users u, cms_user_profiles p WHERE u.is_locked = 0 AND p.user_id = u.id AND (LOWER(p.formsdata) LIKE '%$year%' AND LOWER(p.formsdata) LIKE '%$facultet%') AND u.is_deleted = 0 ORDER BY city DESC"; if ($facultet == 'facultet1') {$fac = ' Факультет Математика';} if ($facultet == 'facultet2') {$fac = ' Факультет Биология';} if ($facultet == 'facultet3') {$fac = ' Факультет Физика';} if ($facultet == 'facultet4') {$fac = ' Факультет Геология';} if ($facultet == 'facultet5') {$fac = ' Факультет Экономика';} $querymsg = '<div class="con_description"><strong>'.$_LANG['SEARCH_BY_HOBBY'].':</strong> '.$value.''.$str.''.$fac.' (<a href="/users/all.html">'.$_LANG['CANCEL_SEARCH_SHOWALL'].'</a>)</div>'; $do = 'view'; }
<form id="facultet" name="facultet" method="post" action="/users/facultet.html"> <input type="hidden" name="fac"/> <div class="stat_block"> <div class="title">Факультет</div> <div class="body"> <select name="fac" id="fac" style="width:300px"> <option value="0" selected>{$LANG.NOT_SPECIFIED}</option> <option value="facultet1">Математика</option> <option value="facultet2">Биология</option> <option value="facultet3">Физика</option> <option value="facultet4">Геология</option> <option value="facultet5">Экономика</option> </select> </div> </div> <div class="stat_block"> <div class="title">Дата поступления</div> <div class="body"> <input type="hidden" name="year"/> <select name="year" id="year" style="width:300px"> <option value="0" selected>{$LANG.NOT_SPECIFIED}</option> <option value="2000">2000</option> <option value="2001">2001</option> <option value="2002">2002</option> <option value="2003">2003</option> <option value="2004">2004</option> <option value="2005">2005</option> <option value="2006">2006</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> </select> <input style="font-size:16px" name="search" type="submit" id="search" value="Найти" /> </div> </div> </form>
То что было в первом совете оставим как было!!!
ВСЕ. Должно появиться два выпадающих списка и кнопка поиск!
У меня работает. С дизайном уже сам разберешся.
#4
22 июня 2010 в 19:21
В запросе
INSERT INTO `cms_modules` (`id`, `position`, `name`, `title`, `is_external`, `content`, `ordering`, `showtitle`, `published`, `user`, `config`, `original`, `css_prefix`, `allow_group`, `cache`, `cachetime`, `cacheint`, `template`) VALUES
(null, ’bottom’, ’wrapper’, ’wrapper’, 1, ’mod_wrapper’, 6, 1, 1, 0, ’’, 1, ’’, -1, 0, 1, ’HOUR’, ’module.tpl’)
Кавычки расставлены не верно.
Синтаксис не понятен.
Например id присваивается значение null !!!!?????????
Смотри такой запрос. В phpmyadmin сработал как надо!
INSERT INTO cms_modules (position, name, title, is_external, content, ordering, showtitle, published, user, config, original, css_prefix, allow_group, cache, cachetime, cacheint, template) VALUES
("bottom", "wrapper", "wrapper", 1, "mod_wrapper", 6, 1, 1, 0, "", 1, "", -1, 0, 1, "HOUR", "module.tpl")
INSERT INTO `cms_modules` (`id`, `position`, `name`, `title`, `is_external`, `content`, `ordering`, `showtitle`, `published`, `user`, `config`, `original`, `css_prefix`, `allow_group`, `cache`, `cachetime`, `cacheint`, `template`) VALUES
(null, ’bottom’, ’wrapper’, ’wrapper’, 1, ’mod_wrapper’, 6, 1, 1, 0, ’’, 1, ’’, -1, 0, 1, ’HOUR’, ’module.tpl’)
Кавычки расставлены не верно.
Синтаксис не понятен.
Например id присваивается значение null !!!!?????????
Смотри такой запрос. В phpmyadmin сработал как надо!
INSERT INTO cms_modules (position, name, title, is_external, content, ordering, showtitle, published, user, config, original, css_prefix, allow_group, cache, cachetime, cacheint, template) VALUES
("bottom", "wrapper", "wrapper", 1, "mod_wrapper", 6, 1, 1, 0, "", 1, "", -1, 0, 1, "HOUR", "module.tpl")
А еще, кому интересно, если добавить одну строчку кода,
можно сохранять изображение на сервер в формате "progressive JPEG" (сейчас просто JPEG).
Тогда фото будет сразу с "плохим качеством", а по мере загрузки — качество будет улучшаться.
Для этого перед вызовом функции imagejpeg нужно включить чересстрочное формирование изображения (функция imageinterlace)
можно сохранять изображение на сервер в формате "progressive JPEG" (сейчас просто JPEG).
Тогда фото будет сразу с "плохим качеством", а по мере загрузки — качество будет улучшаться.
Для этого перед вызовом функции imagejpeg нужно включить чересстрочное формирование изображения (функция imageinterlace)
//Создавать фото в формате progressive JPEG. //Изображение в формате progressive JPEG начинает отображаться в браузере //до окончания полной загрузки с постепенным увеличением качества. // вывод картинки и очистка памяти
У них шапка сайта узкая и ко всему этому размер фото подобран 500*500 чтоб в один экран все влазило.Очень нравится организация работы с фото как вконтакте.
#7
22 июня 2010 в 16:14
Забыл. Вот:
Прикрепленный файл
www_b2a4d.zip
36 Кб
#8
22 июня 2010 в 16:01
Значит переписал не грамотно!
Специально для тебя — устанавливаю с нуля Instant, пишу то что сказано...
У меня работает.
Вот мои файлы. Лови. Сравнишь на досуге.
Специально для тебя — устанавливаю с нуля Instant, пишу то что сказано...
У меня работает.
Вот мои файлы. Лови. Сравнишь на досуге.
#9
21 июня 2010 в 22:19
Где зарыта процедура ресайза фотки до размеров medium? Очень надо )
Да она зарыта в функции img_resize. В файле includes/graphic.inc.php
Правильно тебе говорили!
Только вот не сказали что ошибка в ней мааааленькая. Недочет. Описка. Как хотите называйте. Показываю:
function img_resize($src, $dest, $maxwidth, $maxheight=160, $is_square=false, $watermark=false, $rgb=0xFFFFFF, $quality=75) { if ($size === false) return false; // Определяем исходный формат по MIME-информации, предоставленной // функцией getimagesize, и выбираем соответствующую формату // imagecreatefrom-функцию. $icfunc = "imagecreatefrom" . $format; $isrc = $icfunc($src); $new_width = $size[0]; $new_height = $size[1]; if($is_square){ // вырезаем квадратную серединку по x, если фото горизонтальное if ($new_width>$new_height) // вырезаем квадратную верхушку по y, if ($new_width<$new_height) imagecopyresampled($idest, $isrc, 0, 0, 0, 0, $maxwidth, $maxwidth, min($new_width,$new_height), min($new_width,$new_height)); // квадратная картинка масштабируется без вырезок if ($new_width==$new_height) } else { while ($new_width>$maxwidth) { $new_width *= 0.99; $new_height *= 0.99; } while ($new_height>$maxheight) { $new_width *= 0.99; $new_height *= 0.99; } } if ($watermark) { img_watermark($idest, $new_width, $new_height); } // вывод картинки и очистка памяти return true; }
Поправь как в примере. И попробуй поиграть с параметром $quality (1..100)
#10
21 июня 2010 в 21:46
Если формы создавались через конструктор, тут немного по другому.
Так. Задача стоит добавить именно поиск по факультетам...
Хорошо. Создаем в конструкторе форм дополнительное поле:
тип поля — выпадающий список;
заголовок — Факультет;
ну и поля (!!! Пишем латинскими буквами, чтоб потом небыло геммороя при задании ссылок!!!!!)
facultet1/facultet2/facultet3/facultet4/facultet5
Не боись, потом их поменяем на русские :)
В файле шаблона templates\_default_\components\com_users_view.tpl пишем:
В components\users\frontend.php сотрем старые строчки и напишем свои.........
Проведем корректировку функции usrForm в components\users\includes\userforms.php для подмены ссылок на правильные:
И еще поправим в core\classes\page.class.php
Так. Задача стоит добавить именно поиск по факультетам...
Хорошо. Создаем в конструкторе форм дополнительное поле:
тип поля — выпадающий список;
заголовок — Факультет;
ну и поля (!!! Пишем латинскими буквами, чтоб потом небыло геммороя при задании ссылок!!!!!)
facultet1/facultet2/facultet3/facultet4/facultet5
Не боись, потом их поменяем на русские :)
В файле шаблона templates\_default_\components\com_users_view.tpl пишем:
<div class="stat_block"> <div class="title">Факультет</div> <div class="body"> <ul> <li><a href="/users/hobby/facultet1" rel=”nofollow”>Математика</a></li> <li><a href="/users/hobby/facultet2" rel=”nofollow”>Биология</a></li> <li><a href="/users/hobby/facultet3" rel=”nofollow”>Физика</a></li> <li><a href="/users/hobby/facultet4" rel=”nofollow”>Геология</a></li> <li><a href="/users/hobby/facultet5" rel=”nofollow”>Экономика</a></li> </ul> </div> </div>
/////////////////////////////// SEARCH BY HOBBY (description part) /////////////////////////////////////////////////////////////////// if ($do=='hobby'){ $hobby = $inCore->request('hobby', 'str', ''); $querysql = "SELECT u.*, p.*, u.id as id, u.regdate as fregdate, u.logdate as flogdate FROM cms_users u, cms_user_profiles p WHERE u.is_locked = 0 AND p.user_id = u.id AND (LOWER(p.description) LIKE '%$hobby%' OR LOWER(p.formsdata) LIKE '%$hobby%') AND u.is_deleted = 0 ORDER BY city DESC"; if ($hobby == 'facultet1') {$hobby = 'Математика';} if ($hobby == 'facultet2') {$hobby = 'Биология';} if ($hobby == 'facultet3') {$hobby = 'Физика';} if ($hobby == 'facultet4') {$hobby = 'Геология';} if ($hobby == 'facultet5') {$hobby = 'Экономика';} $querymsg = '<div class="con_description"><strong>'.$_LANG['SEARCH_BY_HOBBY'].':</strong> '.$hobby.' (<a href="/users/all.html">'.$_LANG['CANCEL_SEARCH_SHOWALL'].'</a>)</div>'; $do = 'view'; } /////////////////////////////////////////////////////////
Проведем корректировку функции usrForm в components\users\includes\userforms.php для подмены ссылок на правильные:
function usrForm($user_id, $form_id, $formsdata){ global $_LANG; $inCore = cmsCore::getInstance(); $inDB = cmsDatabase::getInstance(); $html = ''; //GET FORM DATA $sql = "SELECT * FROM cms_forms WHERE id = $form_id"; $result = $inDB->query($sql) ; if (!$inDB->num_rows($result)) { return false; } else { $form = $inDB->fetch_assoc($result); //BUILD FORM $html .= '<div id="usr_prof_form">'; //GET FIELDS DATA $sql = "SELECT * FROM cms_form_fields WHERE form_id = $form_id ORDER BY ordering ASC"; $result = $inDB->query($sql) ; if ($inDB->num_rows($result)){ //BUILD FORM FIELDS $html .= '<table cellpadding="0" cellspacing="0">'; while($field = $inDB->fetch_assoc($result)){ $html .= '<tr><td valign="top" id="title">'; $html .= '<strong>'.$field['title'].'</strong>'; $default = '<em>'.$_LANG['NOT_SET'].'</em>'; if ($formsdata[$field['id']]){ $default = $formsdata[$field['id']]; } } } $link = cmsPage::getMetaSearchLink('/users/hobby/', $default); if ($default == 'facultet1') {$link = '<a href="/users/hobby/facultet1">Математика</a>';} if ($default == 'facultet2') {$link = '<a href="/users/hobby/facultet2">Биология</a>';} if ($default == 'facultet3') {$link = '<a href="/users/hobby/facultet3">Физика</a>';} if ($default == 'facultet4') {$link = '<a href="/users/hobby/facultet4">Геология</a>';} if ($default == 'facultet5') {$link = '<a href="/users/hobby/facultet5">Экономика</a>';} $html .= '<td valign="top" id="field">'.$link.'</td></tr>'; } $html .= '</table>'; } else { $html .= '<p>'.$_LANG['IN_FORM'].' "'.$form['title'].'" '.$_LANG['NOT_FIELDS'].'.</p>'; } $html .= '</div>'; } return $html; }
////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// /** * Генерирует и возращает html-код поля формы * @param array $field * @param string $default * @return html */ public function buildFormField($form_id, $field, $default=''){ $html = ''; $style = 'background-color:white'; $cfg['default'] = $_SESSION['form_last'.$form_id][$field['id']]; } } if ($default){ $cfg['default'] = $default; } switch($field['kind']){ case 'text': $html .= '<input type="text" name="field['.$field['id'].']" maxlength="'.$cfg['max'].'" size="'.$cfg['size'].'" value="'.$cfg['default'].'" style="'.$style.'" />'; break; case 'textarea': $html .= '<textarea name="field['.$field['id'].']" maxlength="'.$cfg['max'].'" cols="'.$cfg['size'].'" rows="'.$cfg['rows'].'" style="'.$style.'">'.$cfg['default'].'</textarea>'; break; case 'checkbox': $html .= '<label><input type="radio" name="field['.$field['id'].']" value="Да" '; if($cfg['checked']) { $html .= 'checked'; } $html .= '/>Да</label> '; $html .= '<label><input type="radio" name="field['.$field['id'].']" value="Нет" '; if(!$cfg['checked']) { $html .= 'checked'; } $html .= '/>Нет</label> '; break; foreach($items as $i){
Если мы говорим о меню пользователя, которое находится под аватором, то опять шаблон косячит.
Открываешь templates\Шаблон\components\com_users_profile.tpl и находишь такие вот строчки:
И полностью меняешь их на
Если это не поможет, выложи свой com_users_profile.tpl, я посмотрю.
А так тяжело говорить в слепую, пологаясь только на интуицию…
Открываешь templates\Шаблон\components\com_users_profile.tpl и находишь такие вот строчки:
{if $is_auth} <div id="usermenu" style="text-align:center;">{$usr.menu}</div> {/if}
{if $is_auth} {* ===============================меню в профиле================================================= *} <div id="usermenu" style="text-align:center;"> <div class="usr_profile_menu"> <table cellpadding="0" cellspacing="1" align="center" style="margin-left:auto;margin-right:auto"><tr> {if !$myprofile} <td><a href="/users/{$usr.id}/sendmessage.html" title="{$LANG.WRITE_MESS}"><img src="/components/users/images/profilemenu/message.gif" border="0"/></a></td> {/if} {if !$myprofile && $cfg.sw_friends} {if !$usr.isfriend} {if !$usr.isfriend_not_add} <td><a href="/users/{$usr.id}/friendship.html" title="{$LANG.ADD_TO_FRIEND}"><img src="/components/users/images/profilemenu/friends.gif" border="0"/></a></td> {else} <td><a href="/users/{$usr.id}/nofriends.html" title="{$LANG.STOP_FRIENDLY}"><img src="/components/users/images/profilemenu/nofriends.gif" border="0"/></a></td> {/if} {else} <td><a href="/users/{$usr.id}/nofriends.html" title="{$LANG.STOP_FRIENDLY}"><img src="/components/users/images/profilemenu/nofriends.gif" border="0"/></a> {/if} {/if} {if !$myprofile} {if $is_admin} {if !$usr.banned} <td><a href="/users/{$usr.id}/giveaward.html" title="{$LANG.TO_AWARD}"><img src="/components/users/images/profilemenu/award.gif" border="0"/></a></td> <td><a href="/admin/index.php?view=userbanlist&do=add&to={$usr.id}" title="{$LANG.TO_BANN}"><img src="/components/users/images/profilemenu/ban.gif" border="0"/></a></td> {/if} <td><a href="/users/{$usr.id}/delprofile.html" title="{$LANG.DEL_PROFILE}"><img src="/components/users/images/profilemenu/delprofile.gif" border="0"/></a></td> {/if} {/if} {if $myprofile} {if $cfg.sw_msg} <td><a href="/users/{$usr.id}/messages.html" title="{$LANG.MY_MESS}"><img src="/components/users/images/profilemenu/message.gif" border="0"/></a></td> {/if} <td><a href="/users/{$usr.id}/editprofile.html" title="{$LANG.CONFIG_PROFILE}"><img src="/components/users/images/profilemenu/edit.gif" border="0"/></a></td> <td><a href="/users/{$usr.id}/avatar.html" title="{$LANG.SET_AVATAR}"><img src="/components/users/images/profilemenu/avatar.gif" border="0"/></a></td> {if $usr.can_add_foto} <td><a href="/users/{$usr.id}/addphoto.html" title="{$LANG.ADD_PHOTO}"><img src="/components/users/images/profilemenu/addphoto.gif" border="0"/></a></td> {/if} {/if} {if $is_admin && !$myprofile} <td><a href="/users/{$usr.id}/editprofile.html" title="{$LANG.CONFIG_PROFILE}"><img src="/components/users/images/profilemenu/edit.gif" border="0"/></a></td> {/if} <td><a href="/users/{$usr.id}/karma.html" title="{$LANG.KARMA_HISTORY}"><img src="/components/users/images/profilemenu/karma.gif" border="0"/></a></td> </tr></table></div> </div> {* ================================================================================ *} {/if}
А так тяжело говорить в слепую, пологаясь только на интуицию…
По конкретней можно? Какие иконки???
Спасибо это много.

А то что во вкладке "контент" слеш дублируется посмотри ссылки в templates\ШАБЛОН\components\com_users_profile.tpl
в строках
Должно быть как написано!
А именно:
в строках
{if $cfg.sw_comm} <div id="usr_comments"> <a href="/users/{$usr.id}/comments.html">{$LANG.USR_COMMENTS}</a> ({$usr.comments_count}) </div> {/if} {if $cfg.sw_photo} <div id="usr_photoalbum"> <a href="/users/{$usr.id}/photoalbum.html">{$LANG.PHOTOALBUM}</a> ({$usr.photos_count}) </div> {/if} {if $cfg.sw_files} <div id="usr_files"> <a href="/users/{$usr.id}/files.html">{$LANG.FILES}</a> ({$usr.files_count}) </div> {/if} {if $cfg.sw_board} <div id="usr_board"> <a href="/users/{$usr.id}/board.html">{$LANG.ADVS}</a> ({$usr.board_count}) </div> {/if}
А именно:
<a href="/users/{$usr.id}/comments.html">{$LANG.USR_COMMENTS}</a> <a href="/users/{$usr.id}/photoalbum.html">{$LANG.PHOTOALBUM}</a> <a href="/users/{$usr.id}/files.html">{$LANG.FILES}</a> <a href="/users/{$usr.id}/board.html">{$LANG.ADVS}</a>
Ну вот и твоя ошибочка, смотри ссылки a href="":
Надо поменять ссылки:
И все!
<td width="27"><img src="/components/users/images/menu/my-photos.gif" border="0"/></td> <td><a href="/users/0/{$id}/photoalbum.html">Фотоальбом</a></td> </tr> {/if} {if $users_cfg.sw_board} <tr> <td width="27"><img src="/components/users/images/menu/my-board.gif" border="0"/></td> <td><a href="/users/0/{$id}/board.html">Объявления</a></td>
<a href="/users/{$id}/photoalbum.html">Фотоальбом</a> <a href="/users/{$id}/board.html">Объявления</a>