0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 2091 Просмотров
*

Dutch

  • Глобальный модератор
  • 662
  • 88 / 2
  • Проф. разработка больших порталов с нуля!
Всем привет!
Не совсем могу понять, что за опции в полях - простого поиска.

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

Как пример:
Делаю поле регионы страны в виде выпадающего списка.
Вот это поле хотелось бы вывести в модуле, которое бы фильтровало запросы по тому или иному региону.

Версия компонента - 207 и выше.
Версия джумлы - 1.0.х или 1.5.х


За ранние благодарю!
*

_ib_

  • Moderator
  • 673
  • 100 / 8
привет, 
1. если ты про модуль "Search Directory" (mod_mt_search ), то в стандарте идёт поиск в именах записей.
Или я тебя не так понял?

2. Добавляешь в sql запрос критерии твоего нового поля, вывод делается так: $l->your_field_name

Давай на примере лучше. Возьмем mod_mt_votedbest, обрати внимание на использование link_votes:

Код
$database->setQuery( "SELECT l.*, cl.cat_id AS cat_id, c.cat_name AS category FROM #__mt_links AS l, #__mt_cats AS c, #__mt_cl AS cl"
// . "\n LEFT JOIN #__mt_cats AS c ON c.cat_id = l.cat_id"
. "\n WHERE l.link_id = cl.link_id AND c.cat_id = cl.cat_id AND cl.main = 1"
. "\n AND link_published='1' && link_approved='1' "
. "\n AND ( publish_up = '0000-00-00 00:00:00' OR publish_up <= '$now'  ) "
. "\n AND ( publish_down = '0000-00-00 00:00:00' OR publish_down >= '$now' ) "
. ( ( $mtconf->get('min_votes_for_toprated') && $mtconf->get('min_votes_for_toprated') >= 1 ) ? "\n AND l.link_votes >= " . $mtconf->get('min_votes_for_toprated') . " " : '' )
. ( (!empty($only_subcats_sql)) ? $only_subcats_sql : '' )
. "\n ORDER BY link_rating DESC, link_votes DESC  "
. "\n LIMIT $count" );
$listing = $database->loadObjectList();

далее для вывода...

Код
foreach( $listing AS $l ) { ....
.. if ( $i == $order["votes"] ) echo "<td>$l->link_votes</td>"; ..

где link_votes - имя поля в базе данных.

думаю, что все и просто.
Легальные шаблоны и дёшево!  + скидки до 50% для шаблонов клуба Joomlart, RocketTheme, Yootheme и Gavick.

при интересе пишите в личку или на мыло: "p" точка "d" собака gmx.de
*

dimko300

  • Захожу иногда
  • 61
  • 1 / 0
Актуальная для меня тема! Только с той разницей, что я хочу поставить в шаблон отображения кратких новостей (page_subCatIndex.tpl) модуль поиска с фильтром! Просто когда у меня в категории 10000 -> материалов, то пользователю очень трудно найти что ему необходимо и необходимо отсеять материалы по нескольким критериям! Как бы поподробнее о подключении к б.д. для вывода поля с выпадающим списком?!
Или может кто знает как применить принцип поиска по типу: index.php?option=com_mtree&search=this_cat_id=field_id+field_id2+field_id3&Itemid
где field_id это и есть выпадающий список значений определенного поля!
Или может кто другой путь подскажет!
В принципе есть готовый модуль для поиска с фильтрацией в Мозетсе:
Код
<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

/*# Include the language file. Default is English
global $mt_language;
if ($mt_language=='') $mt_language='english';
include_once('components/com_mtree/language/'.$mt_language.'.php');
if ( !isset($_MT_LANG) ) $_MT_LANG =& new mtLanguage();*/

# Get params
$moduleclass_sfx = $params->get( 'moduleclass_sfx' );

$filter_by_country = $params->get( 'filter_by_country', '1' );
$filter_by_state = $params->get( 'filter_by_state', '1' );
$filter_by_city = $params->get( 'filter_by_city', '1' );
$filter_by_cust1 = $params->get( 'filter_by_cust1', '0' );
$filter_by_cust2 = $params->get( 'filter_by_cust2', '0' );

$caption_cust2 = $params->get( 'caption_cust2', 'Select %1' );
$caption_country = $params->get( 'caption_country', 'Select Country' );
$caption_state = $params->get( 'caption_state', 'Select State' );
$caption_city = $params->get( 'caption_city', 'Select City' );
$caption_cust1 = $params->get( 'caption_cust1', 'Select %1' );
$caption_cust2 = $params->get( 'caption_cust2', 'Select %1' );
$text = "Что ищем?..." /*_SEARCH_BOX*/;
if( $filter_by_cust2 == $filter_by_cust1 ) {
$filter_by_cust2 = '0';
}

# Countries
$loc_countries = array();
$loc_countries[] = mosHTML::makeOption( '', $caption_country );

$database->setQuery( "SELECT DISTINCT country AS text, country AS value FROM #__mt_links WHERE country <> '' ORDER BY country ASC" );
$tmp_countries = $database->loadObjectList();

$loc_countries = array_merge( $loc_countries, $tmp_countries );

/*if there is only one country it creates the ,select. however it does not show it (display:none)*/
if(sizeof($loc_countries)>2){$displayCountry= " ";}else{$displayCountry=" style='display:none;' ";}

$lists['countries'] = mosHTML::selectList( $loc_countries, 'country', 'name="country"'.$displayCountry.' class="inputbox" size="1" '.( ( $filter_by_state ) ? 'onChange="loadLoc(this,\'State\')"' : ''), 'value', 'text', '' );

# Filter 1

/*$database->setQuery( "SELECT name, value FROM #__mt_config WHERE name LIKE 'cust_%'" );
$custom_fields = $database->loadObjectList('name');

if ( $filter_by_cust1 <> '0' ) $caption_cust1 = str_replace("%1", $custom_fields[$filter_by_cust1]->value, $caption_cust1);
if ( $filter_by_cust2 <> '0' ) $caption_cust2 = str_replace("%1", $custom_fields[$filter_by_cust2]->value, $caption_cust2);

if ( $filter_by_cust1 <> '0' ) {
$filterItems = array();
$filterItems[] = mosHTML::makeOption( '', $caption_cust1 );

$database->setQuery( "SELECT DISTINCT ".$filter_by_cust1." AS text, ".$filter_by_cust1." AS value FROM #__mt_links WHERE ".$filter_by_cust1." <> '' ORDER BY ".$filter_by_cust1." ASC" );
$tmp_filter_1 = $database->loadObjectList();

$filterItems = array_merge( $filterItems, $tmp_filter_1);
$lists['filter1'] = mosHTML::selectList( $filterItems, $filter_by_cust1, 'name="'.$filter_by_cust1.'" class="inputbox" size="1" '.( ($filter_by_cust2  <> '0') ? 'onChange="loadLoc(this,\''.$filter_by_cust2.'\')"' : '' ), 'value', 'text', '' );
}*/

?>
<script language="Javascript">
var state = new Array();
var city = new Array();
var filter2 = new Array();
<?php
foreach( $tmp_countries AS $tmp_country ) {

$database->setQuery( "SELECT DISTINCT state FROM #__mt_links WHERE country = '".$tmp_country->text."' AND country <> '' ORDER BY state ASC" );
$tmp_states = $database->loadResultArray();
if( count($tmp_states) > 0 ) {
echo "state['".$tmp_country->text."']=new Array('";
echo implode("','",$tmp_states);
echo "');\n";
}

if( $filter_by_city ) {
foreach( $tmp_states AS $tmp_state ) {

$database->setQuery( "SELECT DISTINCT city FROM #__mt_links WHERE state = '".$tmp_state."' AND state <> '' ORDER BY city ASC" );
$tmp_cities = $database->loadResultArray();
if( count($tmp_cities) > 0 && !empty($tmp_cities[0]) ) {
echo "city['".$tmp_state."']=new Array('";
echo implode("','",$tmp_cities);
echo "');\n";
}

}
}

}

/*foreach( $tmp_filter_1 AS $tmp_filter ) {
$database->setQuery( "SELECT DISTINCT ".$filter_by_cust2." FROM #__mt_links WHERE ".$filter_by_cust1." = '".$tmp_filter->text."' ORDER BY ".$filter_by_cust1." ASC" );
$tmp_filter_2 = $database->loadResultArray();

if( count($tmp_filter_2) > 0 ) {
echo "filter2['".$tmp_filter->text."']=new Array('";
echo implode("','",$tmp_filter_2);
echo "');\n";
}
}*/

?>

function loadLoc(ref,loc) { loadLoc2(ref.options[ref.selectedIndex].value,loc) }
function loadLoc2(val,loc) { switch(loc) { case 'State':
if(typeof state[val] != "undefined") { var locations = state[val]; <?php if( $filter_by_city ) { ?>
clearList('City'); disableLoc('City'); <?php } ?>
} else { disableLoc(loc); return;}
break; case 'City':
if(typeof city[val] != 'undefined') { var locations = city[val];} else { disableLoc(loc); return;}
break; case '<?php echo $filter_by_cust2 ?>':
if(typeof filter2[val] != 'undefined') { var locations = filter2[val];} else { disableLoc(loc); return;}
break;}
enableLoc(loc); clearList(loc); if ( typeof locations != 'undefined' && locations.length > 0 ) { for (c=0; c < locations.length; c++) { var newOpt = document.createElement("OPTION"); newOpt.text = locations[c]; newOpt.value = locations[c]; document.mtdrilldown.elements['dd'+loc].options[c+1] = newOpt;}
}
}
function disableLoc(id) { gebid('dd'+id).disabled=true;}
function enableLoc(id) { gebid('dd'+id).disabled=false;}
function clearList(id) { var clength = gebid('dd'+id).length; for(var i=(clength-1);i>=0;i--) { gebid('dd'+id).remove(i);}
var newOpt = document.createElement("OPTION"); newOpt.value = ''; switch(id) { <?php if( $filter_by_cust1 <> '0' ) { ?>
case '<?php echo $filter_by_cust1 ?>':
newOpt.text = '<?php echo $caption_cust1 ?>'; break; <?php } ?>
<?php if( $filter_by_cust2 <> '0' ) { ?>
case '<?php echo $filter_by_cust2 ?>':
newOpt.text = '<?php echo $caption_cust2 ?>'; break; <?php } ?>
case "Country":
newOpt.text = '<?php echo $caption_country ?>'; break; case "State":
newOpt.text = '<?php echo $caption_state ?>'; break; case "City":
newOpt.text = '<?php echo $caption_city ?>'; break;}
document.mtdrilldown.elements['dd'+id].options[0] = newOpt;}
function gebid(id){return document.getElementById(id);}
function NormalizeAccents(text) { var i, ac, nc; ac = 'бдвагйлкинпомуцфтъ&\щзс%$БДВАГЙЛКИНПОМУЦФТХЪЬЫЩЗСЭ'; nc = 'aaaaaeeeeiiiiooooouuuucnyyAAAAAEEEEIIIIOOOOOUUUUCNY'; for (i = 0; i < ac.length; i++) { text = text.replace(ac.charAt(i), nc.charAt(i));}
return text;}
</script>
<form action="<?php echo sefRelToAbs($mosConfig_live_site) /*sefRelToAbs("index.php")*/; ?>" method="post" name="mtdrilldown" style="padding:0px; margin:0px;" >
<?php
echo '<input type="text" name="link_desc" size="20" class="inputbox"  value="'. $text .'"  onblur="if(this.value==\'\') this.value=\''. $text .'\';" onfocus="if(this.value==\''. $text .'\') this.value=\'\';" />'; ?>
<?php echo $lists['countries']; ?>
<?php if( $filter_by_state ) { ?>
<select name="state" class="inputbox" size="1" id="ddState" <?php if( $filter_by_city ) echo "onChange=\"loadLoc(this,'City')\" " ?>>
<option value="" selected="selected"><?php echo $caption_state ?></option>
</select>
<?php } ?>
<?php if( $filter_by_city && $filter_by_state ) { ?>
<select name="city" class="inputbox selectCity" size="1" id="ddCity">
<option value="" selected="selected"><?php echo $caption_city ?></option>
</select>
<?php } ?>
<?php if ( $filter_by_cust1 <> '0') echo $lists['filter1']; ?>
<?php if ( $filter_by_cust1 <> '0' && $filter_by_cust2 <> '0' ) { ?>
<select name="<?php echo $filter_by_cust2 ?>" class="inputbox" size="1" id="dd<?php echo $filter_by_cust2 ?>">
<option value="" selected="selected"><?php echo $caption_cust2 ?></option>
</select>
<?php } ?>
<?php
?>
<br><input type="submit" value="Поиск" class="button" />
<input type="hidden" name="Itemid" value="<?php echo $Itemid ?>" />
<input type="hidden" name="option" value="com_mtree" />
<input type="hidden" name="task" value="advsearch2" />
</form><?php
if(sizeof($loc_countries)<=2){ ?>
<script language="Javascript">
loadLoc2(document.mtdrilldown.country.options[1].value,"State"); </script>
<?php } ?>
Только как в нем подключить кастом фильтр, я не могу разобраться!!!
За люую помощь
Буду очень признателен
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как убрать алфавит ?

Автор Игорь Матвеев

Ответов: 1
Просмотров: 1817
Последний ответ 29.07.2016, 19:37:15
от arbik
Не добавляется объявление

Автор Wharfadale

Ответов: 0
Просмотров: 1098
Последний ответ 18.11.2015, 10:44:53
от Wharfadale
XML отзывов в Яндекс. Кааак? Сложно(

Автор glebik

Ответов: 3
Просмотров: 1097
Последний ответ 14.06.2015, 12:01:43
от vipiusss
from backend: Компонент не найден 404 — «Mosets Tree» (com_mtree)

Автор InfRiNgeR Of CalmNeS

Ответов: 4
Просмотров: 1761
Последний ответ 12.11.2014, 21:35:30
от UK1026
Пункты меню и Mosets tree

Автор simono

Ответов: 5
Просмотров: 1502
Последний ответ 04.05.2012, 21:36:01
от simono