2

我在 Joomla 1.5 管理员面板中添加了额外的编辑器字段:

$editor =& JFactory::getEditor();
echo $editor->display( 'shortdescr',  $row->shortdescr , '100%', '150', '75', '20', false );

一切正常,但是当我尝试在此字段中保存 html 时,joomla 删除 html-tags 并且我只得到纯文本。

这是我的saveContent功能:

function saveContent()
{
    global $mainframe;
    // Check for request forgeries
    JRequest::checkToken() or jexit( 'Invalid Token' );

    // Initialize variables
    $db     = & JFactory::getDBO();
    $user       = & JFactory::getUser();
    $dispatcher     = & JDispatcher::getInstance();
    JPluginHelper::importPlugin('content');

    $details    = JRequest::getVar( 'details', array(), 'post', 'array');
    $option     = JRequest::getCmd( 'option' );
    $task       = JRequest::getCmd( 'task' );
    $sectionid  = JRequest::getVar( 'sectionid', 0, '', 'int' );
    $redirect   = JRequest::getVar( 'redirect', $sectionid, 'post', 'int' );
    $menu       = JRequest::getVar( 'menu', 'mainmenu', 'post', 'menutype' );
    $menuid     = JRequest::getVar( 'menuid', 0, 'post', 'int' );
    $nullDate   = $db->getNullDate();

    $row = & JTable::getInstance('content');
    if (!$row->bind(JRequest::get('post'))) {
        JError::raiseError( 500, $db->stderr() );
        return false;
    }
    $post=JRequest::get('post');
    $post['shortdescr'] = JRequest::getVar( 'shortdescr', '', 'post', 'string', JREQUEST_ALLOWHTML );
    $row->bind($details);

    // sanitise id field
    $row->id = (int) $row->id;

    $isNew = true;
    // Are we saving from an item edit?
    if ($row->id) {
        $isNew = false;
        $datenow =& JFactory::getDate();
        $row->modified      = $datenow->toMySQL();
        $row->modified_by   = $user->get('id');
    }

    $row->created_by    = $row->created_by ? $row->created_by : $user->get('id');

    if ($row->created && strlen(trim( $row->created )) <= 10) {
        $row->created   .= ' 00:00:00';
    }

    $config =& JFactory::getConfig();
    $tzoffset = $config->getValue('config.offset');
    $date =& JFactory::getDate($row->created, $tzoffset);
    $row->created = $date->toMySQL();

    // Append time if not added to publish date
    if (strlen(trim($row->publish_up)) <= 10) {
        $row->publish_up .= ' 00:00:00';
    }

    $date =& JFactory::getDate($row->publish_up, $tzoffset);
    $row->publish_up = $date->toMySQL();

    // Handle never unpublish date
    if (trim($row->publish_down) == JText::_('Never') || trim( $row->publish_down ) == '')
    {
        $row->publish_down = $nullDate;
    }
    else
    {
        if (strlen(trim( $row->publish_down )) <= 10) {
            $row->publish_down .= ' 00:00:00';
        }
        $date =& JFactory::getDate($row->publish_down, $tzoffset);
        $row->publish_down = $date->toMySQL();
    }

    // Get a state and parameter variables from the request
    $row->state = JRequest::getVar( 'state', 0, '', 'int' );
    $params     = JRequest::getVar( 'params', null, 'post', 'array' );

    // Build parameter INI string
    if (is_array($params))
    {
        $txt = array ();
        foreach ($params as $k => $v) {
            $txt[] = "$k=$v";
        }
        $row->attribs = implode("\n", $txt);
    }

    // Get metadata string
    $metadata = JRequest::getVar( 'meta', null, 'post', 'array');
    if (is_array($metadata))
    {
        $txt = array();
        foreach ($metadata as $k => $v) {
            if ($k == 'description') {
                $row->metadesc = $v;
            } elseif ($k == 'keywords') {
                $row->metakey = $v;
            } else {
                $txt[] = "$k=$v";
            }
        }
        $row->metadata = implode("\n", $txt);
    }

    // Prepare the content for saving to the database
    ContentHelper::saveContentPrep( $row );

    // Make sure the data is valid
    if (!$row->check()) {
        JError::raiseError( 500, $db->stderr() );
        return false;
    }

    // Increment the content version number
    $row->version++;

    $result = $dispatcher->trigger('onBeforeContentSave', array(&$row, $isNew));
    if(in_array(false, $result, true)) {
        JError::raiseError(500, $row->getError());
        return false;
    }

    // Store the content to the database
    if (!$row->store()) {
        JError::raiseError( 500, $db->stderr() );
        return false;
    }

    // Check the article and update item order
    $row->checkin();
    $row->reorder('catid = '.(int) $row->catid.' AND state >= 0');

    /*
     * We need to update frontpage status for the article.
     *
     * First we include the frontpage table and instantiate an instance of it.
     */
    require_once (JPATH_ADMINISTRATOR.DS.'components'.DS.'com_frontpage'.DS.'tables'.DS.'frontpage.php');
    $fp = new TableFrontPage($db);

    // Is the article viewable on the frontpage?
    if (JRequest::getVar( 'frontpage', 0, '', 'int' ))
    {
        // Is the item already viewable on the frontpage?
        if (!$fp->load($row->id))
        {
            // Insert the new entry
            $query = 'INSERT INTO #__content_frontpage' .
                    ' VALUES ( '. (int) $row->id .', 1 )';
            $db->setQuery($query);
            if (!$db->query())
            {
                JError::raiseError( 500, $db->stderr() );
                return false;
            }
            $fp->ordering = 1;
        }
    }
    else
    {
        // Delete the item from frontpage if it exists
        if (!$fp->delete($row->id)) {
            $msg .= $fp->stderr();
        }
        $fp->ordering = 0;
    }
    $fp->reorder();

    $cache = & JFactory::getCache('com_content');
    $cache->clean();

    $dispatcher->trigger('onAfterContentSave', array(&$row, $isNew));

    switch ($task)
    {
        case 'go2menu' :
            $mainframe->redirect('index.php?option=com_menus&menutype=' . $menu);
            break;

        case 'go2menuitem' :
            $mainframe->redirect(
                'index.php?option=com_menus&menutype=' . $menu
                . '&task=edit&id=' . $menuid
            );
            break;

        case 'menulink' :
            ContentHelper::menuLink($redirect, $row->id);
            break;

        case 'resethits' :
            ContentHelper::resetHits($redirect, $row->id);
            break;

        case 'apply' :
            $msg = JText::sprintf('SUCCESSFULLY SAVED CHANGES TO ARTICLE', $row->title);
            $mainframe->redirect('index.php?option=com_content&sectionid='.$redirect.'&task=edit&cid[]='.$row->id, $msg);
            break;

        case 'save' :
        default :
            $msg = JText::sprintf('Successfully Saved Article', $row->title);
            $mainframe->redirect('index.php?option=com_content&sectionid='.$redirect, $msg);
            break;
    }
}
4

1 回答 1

4

而不是这个——

$row = & JTable::getInstance('content');
if (!$row->bind(JRequest::get('post'))) {
    JError::raiseError( 500, $db->stderr() );
    return false;
}
$post=JRequest::get('post');
$post['shortdescr'] = JRequest::getVar( 'shortdescr', '', 'post', 'string', JREQUEST_ALLOWHTML );

试试这个-

    $post=JRequest::get('post');
    $post['shortdescr'] = JRequest::getVar( 'shortdescr', '', 'post', 'string', JREQUEST_ALLOWHTML );
    $row = & JTable::getInstance('content');
    if (!$row->bind($post)) {
        JError::raiseError( 500, $db->stderr() );
        return false;
    }
于 2012-11-20T07:33:19.720 回答