這個函數定義了一個名為 adminForm(作為JavaScript應用) 并指向 index.php 的表單,接着顯示一個帶有 adminlist 類的表格,第一行為表格的頭部,第一列是一個複選框 “check all”,它會自動地選擇頁面上的所有記錄。
接着使用傳進來的記錄數組來循環顯示每一行的數組。要注意的是變量 $k,它在每次循環中會在 0 和 1 之中更換值,它的作用好是用來更換每個 <tr> 的類,進而控制了每行顯示的背景色。
大部分的成員變量會直接輸出,但是有兩個比較特殊,JHTML::(‘grid.id‘) 函數将傳回一個能被後端 JavaScript 識别的複選框,JHTML::_('grid.published') 函數傳回一個基于 成員變量 published 的值的圖檔,當 published 的值是 1 時,将傳回打勾的圖檔,否則傳回打“X”的圖檔。
在表格下面,有四個隐藏的變量,第一個處理 option 的值,以便路由到正确的元件,第二個是 task,它是在送出表單之前以便讓工具欄中的 JavaScript 能給它指派。第三個是 boxchecked,當有任意一行的複選框被選擇,boxchecked 被置為 1,當所有行的複選框被清除,boxchecked 被置為 0,它是用來輔助 JavaScript 來處理清單。
當完成了 HTML 代碼的輸出,最後一步就是更新檔案admin.reviews.php中的 switch() 語句,加入下面的高亮代碼:
switch($task)
{
case 'add':
editReview( $option );
break;
case 'save':
saveReview( $option );
break;
default:
showReviews( $option );
break;
}
在浏覽器中輸入URL http://localhost/joomla/administrator/index.
php?option=com_reviews,一個相似的頁面如下:
暫時不提供圖檔顯示,請參考《Joomla! extension development》
編輯記錄
我們将擴充原有的代碼來編輯記錄,而不是寫一個新的功能。在檔案 admin.reviews.php 中的 editReview() 函數中用以下的高亮代碼來代替:$row=&JTable:getInstance(‘Review’, ‘Table’):
function editReview( $option )
{
$row =& JTable::getInstance('review', 'Table');
$cid = JRequest::getVar( 'cid', array(0), '', 'array' );
$id = $cid[0];
$row->load($id);
當執行 editReview () 函數時,我們取得 TableReview 對象來處理資料,然後會從表單中取得記錄ID的數組變量 cid,既然在同一個時間隻編輯一條記錄,那我們隻選擇第一個數組元素來加載相應的記錄。更新檔案 admin.reviews.php 中的 switch() 語句如下:
case 'edit':
case 'add':
editReview( $option );
break;
你應該要提供能夠讓使用者通過點選來編輯各自的記錄的連結。在檔案 admin.reviews.html.php 的HTML_reviews::showReviews() 函數下加入一下高亮的代碼:
jimport('joomla.filter.output');
$k = 0;
for ($i=0, $n=count( $rows ); $i < $n; $i++)
{
$row = &$rows[$i];
$checked = JHTML::_('grid.id', $i, $row->id );
$published = JHTML::_('grid.published', $row, $i );
$link = JFilterOutput::ampReplace( 'index.php?option=' .
$option . '&task=edit&cid[]='. $row->id );
?>
<tr class="<?php echo "row$k"; ?>">
<td>
<?php echo $checked; ?>
</td>
<td>
<a href="<?php echo $link; ?>" target="_blank" rel="external nofollow" >
<?php echo $row->name; ?></a>
</td>
<td>
<?php echo $row->address; ?>
</td>
<td>
<?php echo $row->reservations; ?>
</td>
<td>
<?php echo $row->cuisine; ?>
</td>
<td>
<?php echo $row->credit_cards; ?>
</td>
<td align="center">
<?php echo $published;?>
</td>
為了相容 XHTML,我們需要確定符号 & 使用 & 來代替,我們使用 ampReplace() 來處理,它是 JFilterOutput 類的成員函數,JFilterOutput 通過調用 jimport(‘joomla.filter.output’) 來加載。Joomla! 提供了許多不同的庫,例如 XML處理和RSS輸出等。我們使用 jimport() 函數來按需要加載代碼,而不是每次加載Joomla! 是都加載所用的庫。你需要更新工具欄的代碼,首先,去到檔案 toolbar.reviews.php 中的 switch() 語句:
case 'edit':
case 'add':
TOOLBAR_reviews::_NEW();
break;
既然已經加入“編輯”函數,我們可以在工具欄加入“編輯”按鈕,他可以根據每一行記錄選擇的複選框的來編輯内容,而不單隻是點選連結。打開檔案 toolbar.reviews.html.php ,添加以下的高亮代碼:
TOOLBAR_reviews::_DEFAULT():
JToolBarHelper::unpublishList();
JToolBarHelper::editList();
JToolBarHelper::deleteList();
儲存所有的檔案,然後重新整理頁面 http://localhost/joomla/administrator/index.php?option=com_reviews,每一行的記錄的name 欄都會帶有連結,點選連結你會看到如下的頁面:
暫時不提供圖檔顯示,請參考《Joomla! extension development》
你可能已經注意到了在編輯頁面的工具欄上有個“應用”按鈕,它允許人們儲存内容的同時,頁面依然保留在編輯的狀态,為了是應用按鈕生效,需要在檔案 admin.reviews.php 中做兩個改變,在 switch() 語句中加入一下的高亮代碼:
case 'apply':
case 'save':
saveReview( $option, $task );
break;
在 saveReview() 函數中加入 $task 參數:
function saveReview( $option, $task )
将 saveReview() 函數的最後一行更改為如下:
current $task:
switch ($task)
{
case 'apply':
$msg = 'Changes to Review saved';
$link = 'index.php?option=' . $option .
'&task=edit&cid[]='. $row->id;
break;
case 'save':
default:
$msg = 'Review Saved';
$link = 'index.php?option=' . $option;
break;
}
$mainframe->redirect($link, $msg);
删除記錄
增加删除的功能是相當的簡單,在檔案 admin.reviews.php 的 switch() 語句中加入以下的 case 語句:
case 'remove':
removeReviews( $option );
break;
當然也要增加 removeReviews() 函數:
function removeReviews( $option )
{
global $mainframe;
$cid = JRequest::getVar( 'cid', array(), '', 'array' );
$db =& JFactory::getDBO();
if(count($cid))
{
$cids = implode( ',', $cid );
$query = "DELETE FROM #__reviews WHERE id IN ( $cids )";
$db->setQuery( $query );
if (!$db->query())
{
echo "<script> alert('".$db->getErrorMsg()."');
window.history.go(-1); </script>\n";
}
}
$mainframe->redirect( 'index.php?option=' . $option );
}
我們從表單中再一次取得 cid 變量,然後檢查數組中是否有 id 元素。如果有 id 元素,那麼用逗号将數組中的元素連成字元串,然後用這個字元串來建立 SQL 語句,在執行過程中,除非發生錯誤,否則重定向到清單頁面。
轉載于:https://www.cnblogs.com/vicenteforever/articles/1629966.html