4

Joomlacom_contentには、記事のステータスを「公開」して記事を公開または非公開にするための小さなトグル ボタンがあります。そのため、コンポーネントに同じタイプのトグル ボタンを配置して、ユーザーを承認または非承認にしたいと考えています。

さて、専門家からのアドバイスが欲しいです。私は経験しましcom_contentたが、どのように始めればよいのかよくわかりません。com_contentJoomla 2.5に沿ってコーディングしていないため、アプローチとコードが理解できません。

これからどのように始めればよいですか?

4

2 に答える 2

6

私はそれを自分で動作させました。将来それを必要とする人々のために経験を共有させてください。テーブルフィールドまたはデータベースフィールドが承認され、その値は最初は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>

dbからの私のフィールドである$row->authorizedに注意してください。次に、job.phpファイルを作成してヘルパーディレクトリに配置したjob.approveを作成しました。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;
    }
}

次に、承認機能とともに承認と非承認としてコントローラーに2つのタスクを登録しました。

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を使用しておらず、コードもjoomla1.7スタイルではないことを忘れないでください。しかし、私はMVCアーキテクチャに従っています。したがって、私の方法がjoomla1.7以降のスタイルでコーディングしている人々に有効かどうかはわかりません。

于 2013-01-24T06:12:07.893 に答える
2

これを使用して公開ボタンを作成できます続きを読む-

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.approveitems.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); 
} 

これを読んでください-Joomla2.5はカスタムコンポーネントのjgrid.published列を拡張します

これがお役に立てば幸いです。

于 2013-01-22T09:44:46.880 に答える