CakePHP - ошибка помощника TinyMceHelper: метод TinyMceHelper :: __name не существует - PullRequest
3 голосов
/ 26 августа 2010

Итак, я хочу реализовать помощник TinyMce.Я следовал инструкциям из пекарни CakePHP, но все еще получаю сообщение об ошибке.

Это массив помощников в контроллере моего проекта:

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

Это загруженный мной помощник tinymce:

<?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()) {
    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);
}
}
?>

И это мой вид добавления, который я хочуиспользовать помощника на:

<?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');
?>

Все выглядит хорошо, но я получаю эту ошибку:

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

Думаете, я здесь пропускаю шаг?

Ответы [ 3 ]

3 голосов
/ 27 августа 2010

Вы должны использовать CakePHP 1.3.Форма помощника в 1.2 используется __name.В 1.3 он был почему-то изменен на _name.

Если вы обновите помощника с:

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

до

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

Вы должны хорошо идти.

0 голосов
/ 25 июня 2011

Вы должны сделать так, как предложено cdburgess , и если это не работает, убедитесь, что ваши javascripts загружены, и отредактируйте tinmce.php код помощника TinyMce для правильной загрузки javascripts, строка выглядит так: 1003 *

 $this->Javascript->link('/webroot/js/tiny_mce.js', false);
0 голосов
/ 27 августа 2010

Я думаю, вы неправильно набрали имя помощника в контроллере.Это должно быть:

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

и, на ваш взгляд:

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

Надеюсь, что поможет.

...