小心,這裏躺着龍。 以下是我完成這件事的方式。首先,您創建顯示感興趣內容的視圖。在你感興趣的所有領域添加排序(數量,價格,標題等)不要擔心它們都不能很好地協同工作,你將在代碼中動態地刪除/改變它們。
我創建了一個模塊來包含一個函數來處理排序。創建一個類型爲「Global:Null」的參數。它可以在任何時候出現在你的列表中,但是該URL地址必須存在一個參數,否則代碼將不會執行。我通常會添加標題或搜索類型。設置參數以顯示所有值(如果不存在)並添加驗證程序。選擇一個PHP驗證器並添加以下內容。
return _mymodule_handle_sortables($view);
這將允許您快速/方便地編輯功能的內容,而無需編輯/保存視圖/預覽視圖在每次迭代。請注意,我傳遞了$ _GET變量。這不是必須的,因爲無論如何它都應該在函數中可用。我只是爲了便於閱讀而做。
第一步,得到了排序字段的名稱與devel模塊
function _mymodule_handle_sortables(&$view) {
dpm($view->sort);
}
預覽視圖並注意字段的名稱。獲得它們後,可以執行以下操作來更改視圖的輸出。
function _mymodule_handle_sortables(&$view) {
switch ($_GET['sort']) {
case 'sell_price_asc':
unset($view->sort['title']);
$view->sort['sell_price']->options['order'] = 'ASC';
break;
case 'sell_price_desc':
unset($view->sort['title']);
$view->sort['sell_price']->options['order'] = 'DESC';
break;
case 'alpha_asc':
unset($view->sort['sell_price']);
$view->sort['title']->options['order'] = 'ASC';
break;
case 'alpha_desc':
unset($view->sort['sell_price']);
$view->sort['title']->options['order'] = 'DESC';
break;
}
return true;
}
一個PHP頭添加到您的視圖,並添加以下代碼行
<?php echo _mymodule_sortables($_GET); ?>
現在,您可以動態顯示一個排序標題。這是一個公認的過度的功能來做到這一點。
function _emunications_sortables($g) {
// Collect all the relevant GET parameters
$gopts = array();
foreach ($g as $k=>$v) {
if ($k == 'q') continue;
$gopts[$k] = $v;
}
$opts = http_build_query($gopts);
// Preserve the sort choice for selection
$s1 = $s2 = $s3 = $s4 = '';
switch ($gopts['sort']) {
case 'alpha_asc' : $s1 = 'selected="selected"';break;
case 'alpha_desc' : $s2 = 'selected="selected"';break;
case 'sell_price_asc' : $s3 = 'selected="selected"';break;
case 'sell_price_desc' : $s4 = 'selected="selected"';break;
}
// Unset the sort option so that it can be set in the url manually below
unset($gopts['sort']);
$opts_sort = http_build_query($gopts);
$output = "
<div class='product_index_header'>
<div class='view-selection'>
<span class='descript'>View: </span>
<a class='list' href='/products?$opts'> </a>
<span class='bar'>|</span>
<a class='grid' href='/products/grid/list?$opts'> </a>
</div>
<div class='sortable'>
<select name='droppy' class='droppy kitteh' onchange=\"window.location.href=$('select.droppy').val()\">
<option value='#'>Sort</option>
<option $s1 value='?sort=alpha_asc&$opts_sort'>a-z</option>
<option $s2 value='?sort=alpha_desc&$opts_sort'>z-a</option>
<option $s3 value='?sort=sell_price_asc&$opts_sort'>$ - $$</option>
<option $s4 value='?sort=sell_price_desc&$opts_sort'>$$ - $</option>
</select>
</div>
</div>
";
return $output;
}
哇,別開玩笑!真棒,但這應該幫助我定製不少東西(不僅僅是排序)。謝謝! – Radu 2010-07-06 15:27:03