php - joomla 组件中的自定义状态按钮

标签 php joomla joomla2.5

Joomla com_content 有一个用于文章状态“发布”的小切换按钮,用于发布或取消发布文章。所以,我想在我的组件中使用相同类型的切换按钮来批准或拒绝用户。

现在,我想听听专家的一些建议,了解如何着手。我已经浏览过 com_content 但我真的不明白我应该如何开始。我无法理解 com_content 方法和代码,因为我没有按照 Joomla 2.5 进行编码。

我应该如何开始?

最佳答案

我自己让它工作。让我把经验分享给将来需要的人。我的表字段或数据库字段是approved 并且它的值最初是 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->approved 这是来自 db 的我的字段。然后我已经为它创建了一个 job.php 文件并放置在 helpers 目录中的 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;
    }
}

然后我在 Controller 中将两个任务注册为批准和取消批准以及批准功能:

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;
 }

请不要忘记将 job.php 文件包含在您的 view/view.html.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 及更高版本编码的人。

关于php - joomla 组件中的自定义状态按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14413916/

相关文章:

twitter-bootstrap - 使用 Twitter Bootstrap for Joomla 模板

php - joomla 2.5错误页面

php - 在 PHP 中使用 curl 上传失败

php - JRoute::_() - 函数在哪里?在 joomla

php - 迁移类别/部分到 joomla 2.5

mysql - sql 计数当前用户标识添加的行数(视频)

php - 需要评估 Joomla 是否适合 Web 应用程序需求

php - 使用 POST 更改 PHP session 变量

php - 如何在数据库中保存 HTML

PHPMailer - SSL3_GET_SERVER_CERTIFICATE :certificate verify failed