开发者

CakePHP - TinyMceHelper helper error: Method TinyMceHelper::__name does not exist

开发者 https://www.devze.com 2023-01-12 23:47 出处:网络
So I\'m wanting to implement the TinyMce helper. I\'ve followed instructions from the cakephp bakery but am still getting a error.

So I'm wanting to implement the TinyMce helper. I've followed instructions from the cakephp bakery but am still getting a error.

This is the helpers array in my project controller:

var $helpers = array('Form', 'Time', 'Crumb', 'Text', 'Tinymce');

This is the tinymce helper I downloaded:

<?php
class TinyMceHelper extends AppHelper {
// Take advantage of other helpers
var $helpers = array('Javascript', 'Form');
// Check if the tiny_mce.js file has been added or not
var $_script = false;

/**
 * Adds the tiny_mce.js file and constructs the options
 *
 * @param string $fieldName Name of a field, like this "Modelname.fieldname", "Modelname/fieldname" is deprecated
 * @param array $tinyoptions Array of TinyMCE attributes for this textarea
 * @return string JavaScript code to initialise the TinyMCE area
 */
function _build($fieldName, $tinyoptions = array()) {开发者_JAVA技巧
    if (!$this->_script) {
        // We don't want to add this every time, it's only needed once
        $this->_script = true;
        $this->Javascript->link('/js/tiny_mce/tiny_mce.js', false);
    }
    // Ties the options to the field
    $tinyoptions['mode'] = 'exact';
    $tinyoptions['elements'] = $this->__name($fieldName);
    return $this->Javascript->codeBlock('tinyMCE.init(' . $this->Javascript->object($tinyoptions) . ');');
}

/**
 * Creates a TinyMCE textarea.
 *
 * @param string $fieldName Name of a field, like this "Modelname.fieldname", "Modelname/fieldname" is deprecated
 * @param array $options Array of HTML attributes.
 * @param array $tinyoptions Array of TinyMCE attributes for this textarea
 * @return string An HTML textarea element with TinyMCE
 */
function textarea($fieldName, $options = array(), $tinyoptions = array()) {
    return $this->Form->textarea($fieldName, $options) . $this->_build($fieldName, $tinyoptions);
}

/**
 * Creates a TinyMCE textarea.
 *
 * @param string $fieldName Name of a field, like this "Modelname.fieldname", "Modelname/fieldname" is deprecated
 * @param array $options Array of HTML attributes.
 * @param array $tinyoptions Array of TinyMCE attributes for this textarea
 * @return string An HTML textarea element with TinyMCE
 */
function input($fieldName, $options = array(), $tinyoptions = array()) {
    $options['type'] = 'textarea';
    return $this->Form->input($fieldName, $options) . $this->_build($fieldName, $tinyoptions);
}
}
?>

And this my add view that I want to use the helper on:

<?php
echo $form->create('Project');
echo $form->input('title', array('label' => 'Title'));
echo $form->input('website', array('label' => 'Website'));
echo $tinymce->input('description');
echo $form->input('language_id', array('label' => 'Language'));
echo $form->input('tags', array('type' => 'text'));
echo $form->end('Post project');
?>

Everything looks alright but I'm getting this error:

Warning (512): Method TinyMceHelper::__name does not exist [CORE/cake/libs/view/helper.php, line 154]

Think I'm missing a step here?


You must be using CakePHP 1.3. The form helper in 1.2 used __name. In 1.3 it was for some reason changed to _name.

If you update the helper from:

$tinyoptions['elements'] = $this->__name($fieldName);

to

$tinyoptions['elements'] = $this->_name($fieldName);

You should be good to go.


I think you mistyped the helper name in controller. It should be :

var $helpers = array('Form', 'Time', 'Crumb', 'Text', 'TinyMce');

and in your view :

echo $tinyMce->input('description');

Hope that help.


You should do as cdburgess suggested, and if it does not work, make sure your javascripts gets loaded, and edit tinmce.php the TinyMce helper's code to properly load javascripts, line looks like this:

 $this->Javascript->link('/webroot/js/tiny_mce.js', false);
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号