[英]custom status button in joomla component
Joomla com_content
具有小切換按鈕,用於文章的狀態“發布”以發布或取消發布文章。 所以,我想在我的組件中使用相同類型的切換按鈕來批准或拒絕用戶。
現在,我想從專家那里得到一些關於如何去做的建議。 我已經通過了com_content
但我真的不明白我應該如何開始。 我無法理解com_content
方法和代碼,因為我不符合Joomla 2.5的編碼。
我該怎么做呢?
我讓它自己工作。 讓我分享那些將來需要它的人的經驗。 我的表字段或數據庫字段被批准 ,其值最初為0 (這意味着該記錄未經管理員批准)
在我的布局/默認頁面中,我有以下代碼用於切換按鈕:
<?php
$k = 0;
for ($i=0, $n=count( $this->items ); $i < $n; $i++)
{
$row = &$this->items[$i];
..................
..................
?>
..................
<td align="center">
<?php echo JHtml::_('job.approve', $row->approved, $i); ?>
</td>
請注意,我已經批准了$ row->,這是我的db字段。 然后我的job.approve為我創建了一個job.php文件並放在幫助程序目錄中。 job.php的代碼是:
<?php
// no direct access
defined('_JEXEC') or die;
/**
* @package Joomla.Administrator
* @subpackage com_content
*/
abstract class JHtmlJob
{
/**
* @param int $value The state value
* @param int $i
*/
static function approve($value = 0, $i)
{
// Array of image, task, title, action
$states = array(
0 => array('disabled.png', 'approve', 'Unapproved', 'Toggle to approve'),
1 => array('tick.png', 'unapprove', 'Approved', 'Toggle to unapprove'),
);
$state = JArrayHelper::getValue($states, (int) $value, $states[1]);
$html = JHtml::_('image', 'admin/'.$state[0], JText::_($state[2]), NULL, true);
//if ($canChange) {
$html = '<a href="#" onclick="return listItemTask(\'cb'.$i.'\',\''.$state[1].'\')" title="'.JText::_($state[3]).'">'
. $html.'</a>';
//}
return $html;
}
}
然后我在控制器中注冊了兩個任務作為批准和不批准以及批准功能:
public function __construct($config = array())
{
parent::__construct($config);
$this->registerTask('unapprove', 'approve');
}
/**
* Method to toggle the featured setting of a list of articles.
*
* @return void
* @since 1.6
*/
function approve()
{
// Initialise variables.
$user = JFactory::getUser();
$ids = JRequest::getVar('cid', array(), '', 'array');
$values = array('approve' => 1, 'unapprove' => 0);
$task = $this->getTask();
$value = JArrayHelper::getValue($values, $task, 0, 'int');
if (empty($ids)) {
JError::raiseWarning(500, JText::_('JERROR_NO_ITEMS_SELECTED'));
}
else {
// Get the model.
$model = $this->getModel('jobs');
// Publish the items.
if (!$model->approve($ids, $value)) {
JError::raiseWarning(500, $model->getError());
}
}
$redirectTo = JRoute::_('index.php?option='.JRequest::getVar('option'));
$this->setRedirect($redirectTo);
}
之后,我在模型中添加了以下函數,將值更新為0或1。
function approve($cid, $publish) {
if (count( $cid ))
{
JArrayHelper::toInteger($cid);
$cids = implode( ',', $cid );
$query = 'UPDATE #__tbljobs'
. ' SET approved = '.(int) $publish
. ' WHERE id IN ( '.$cids.' )';
$this->_db->setQuery( $query );
if (!$this->_db->query()) {
$this->setError($this->_db->getErrorMsg());
return false;
}
}
return true;
}
請不要忘記在view / view.html.php文件中包含job.php文件,如下所示:
<?php
defined('_JEXEC') or die('Restricted Access');
jimport('joomla.application.component.view');
require_once JPATH_COMPONENT .'/helpers/job.php';
Class JobsViewListJobs extends JView
{
並且記住我沒有使用JForm,我的代碼也不是joomla 1.7風格。 但我遵循MVC架構。 所以,我不確定我的方法是否適用於以joomla 1.7及以上風格編碼的人。
您可以使用它來創建發布按鈕閱讀更多 -
JHtml::_('jgrid.published', $item->state, $i, 'articles.', $canChange);
或者這個html-
<?php if($item->approve){?>
<td class="center">
<a class="jgrid hasTip" href="javascript:void(0);" onclick="return listItemTask('cb<?php echo $i?>','items.disapprove')" title=""><span class="state publish"><span class="text">Disapprove</span></span></a>
</td>
<?php }else{?>
<td class="center">
<a class="jgrid hasTip" href="javascript:void(0);" onclick="return listItemTask('cb<?php echo $i?>','items.approve')" title=""><span class="state unpublish"><span class="text">Approve</span></span></a>
</td>
<?php }?>
在items.approve
和items.disapprove
, items is controller
, approve and disapprove
是項目控制器的任務。
在你的控制器中添加這些功能 -
public function __construct($config = array()){
parent::__construct($config);
$this->registerTask('unapproved', 'approved');
}
function approved() {
$ids = JRequest::getVar('cid', array(), '', 'array');
JArrayHelper::toInteger($ids );
$cids = implode( ',', $ids);
$values = array('approved' => 1, 'unapproved' => 0);
$task = $this->getTask();
$value = JArrayHelper::getValue($values, $task, 0, 'int');
$db =& JFactory::getDBO();
$query = 'UPDATE #__tbljobs' . ' SET approved = '.(int) $value . ' WHERE id IN ( '.$cids.' )';
$db->setQuery($query);
$result = $db->query();
$redirectTo = JRoute::_('index.php?option='.JRequest::getVar('option').'&task=display');
$this->setRedirect($redirectTo);
}
閱讀本文 - Joomla 2.5擴展了自定義組件中的jgrid.published列
希望這會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.