Поле wysiwyg-редактора в QuickForm

que_bunt

Новичок
Поле wysiwyg-редактора в QuickForm

Здраствуйте.
Вопрос к тем кто сталкивался с проблемой поля wysiwyg-редактора в QuickForm.
кто как решил эту проблему? а то у меня с встраиванием редактора Spaw постоянно возникают проблемы.
может есть какие-то готовые решения?
 

zarus

Хитрожопый макак
Innova Studio - чистый javascript. Минус один - кривой движок, хотя и улучшается. Ах да, платный редактор, если не пугает 90у.е. за лицензию.
 

que_bunt

Новичок
zarus я не работал никогда с Innova Studio, а разве там есть интеграция с QuickForm ? сомневаюсь.

хочу именно посмотреть на класс wysiwyg-поля в QuickForm, может я еще где-то что-то у себя пропустил.
 

Фанат

oncle terrible
Команда форума
а то у меня с встраиванием редактора Spaw постоянно возникают проблемы.
может есть какие-то готовые решения?
представляю, как папаша бы твой, глядя на хулиганство в детстве, сказал бы: блин, проблемы с ним постоянно. Может, нового завести, вместо этого? или какие-то уже готовые - взрослые и обученные бывают?

пояснение для ментально альтернативных: это не оскорбление, а метафора.
Должна заставить человека задуматься над тем, что возникающие проблемы - ЭТО НЕ ПОВОД всё бросить, и искать "новое решение".
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Класс такой ваще-то элементарно пишеца... Вот что я сам использую для подключения FCKEditor'а:
PHP:
class HTML_QuickForm_fckeditor extends HTML_QuickForm_textarea
{
    protected $options = array(
        'basePath'   => '/FCKeditor/',
        'width'      => '100%',
        'height'     => '200',
        'toolbarSet' => 'Default',
        'config'     => array()
    );


    public function __construct($elementName = null, $elementLabel = null, $attributes = null, $options = null)
    {
        parent::HTML_QuickForm_textarea($elementName, $elementLabel, $attributes);
        $this->_type = 'fckeditor';
        if (null !== $options) {
            $this->options = array_merge($this->options, $options);
        }
    }


    public function toHtml()
    {
        if ($this->isFrozen() || !$this->isBrowserSupported()) {
            return parent::toHtml();
        } else {
            $name  = $this->getName();
            $value = htmlspecialchars($this->getValue());
            $link  = $this->options['basePath'] . 'editor/fckeditor.html?InstanceName=' . $name .
                    ('' == $this->options['toolbarSet']? '': '&Toolbar=' . $this->options['toolbarSet']);

            return '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . $value . '" />' .
                   '<input type="hidden" id="' . $name . '___Config" value="' . $this->getConfigString() . '" />' .
                   '<iframe id="' . $name . '___Frame" src="' . $link . '" width="' . $this->options['width'] . 
                   '" height="' . $this->options['height'] . '" frameborder="no" scrolling="no"></iframe>';
        }
    }


    protected function isBrowserSupported()
    {
        $sAgent = $_SERVER['HTTP_USER_AGENT'];
        if (strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false) {
            $iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3);
            return ($iVersion >= 5.5) ;
        } elseif (strpos($sAgent, 'Gecko') !== false) {
            $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
            return ($iVersion >= 20030210) ;
        }
        return false;
    }


    protected function getConfigString()
    {
        $params = array();
        foreach ($this->options['config'] as $key => $value) {
            if (true === $value) {
                $hValue = 'true';
            } elseif (false === $value) {
                $hValue = 'false';
            } else {
                $hValue = $this->encodeConfig($value);
            }
            $params[] = $this->encodeConfig($key) . '=' . $hValue;
        }
        return implode('&amp;', $params);
    }


    protected function encodeConfig($str)
    {
        return strtr($str, array(
            '&' => '%26',
            '=' => '%3D',
            '"' => '%22'
        ));
    }
}
 

que_bunt

Новичок
Фанат я не ментально альтернативный и понимаю. просто провозился уже 3 дня с этой задачей и никак не сдвинулся.

Sad Spirit спасибо, по сути я все также сделал только для spaw, и теперь понимаю что скорее все в подключении самого редактора. если подключаю в классе елемента (в ф-и toHtml) - ошибки, если подключаю в скрипте - все нормально. вообщем счас сделал костиль - str_replace('<textarea name="content"></textarea>', $spaw->gethtml(), $form_html); попробую еще повозиться, не очень хочеться переходить на fckeditor.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: que_bunt
Sad Spirit спасибо, по сути я все также сделал только для spaw, и теперь понимаю что скорее все в подключении самого редактора. если подключаю в классе елемента (в ф-и toHtml) - ошибки, если подключаю в скрипте - все нормально.
тут товарищ Фанат сможет выразиться гораздо более цветисто, но я тоже скажу --- отлаживай. Такие ошибки (кстати, какого хрена мы до сих пор не видели их текста?) подсказывают нам то, что где-то используются глобальные переменные.
 

que_bunt

Новичок
ошибки такие:
Notice: Undefined variable: spaw_lang_data in z:\home\host.org.ua\www\admin-panel\spaw\class\lang.class.php on line 90

Notice: Undefined variable: spaw_toolbar_data in z:\home\host.org.ua\www\admin-panel\spaw\class\toolbars.class.php on line 156

и дальше в том же стиле только разные переменные.
причем все делаю также как и отдельно в скрипте.

PHP:
    function toHtml()
    {
        if ($this->_flagFrozen) {
            return $this->getFrozenHtml();
        } else {
			//подключаем клас WYSIWYG-редактор
			$spaw_root='spaw/';
			include_once('spaw/spaw_control.class.php');
			$spaw = new SPAW_Wysiwyg($this->getName() /*name*/, ''/*value*/,
			   'ru' /*language*/, 'page_edit' /*toolbar mode*/, 'default' /*theme*/,
			   '350px' /*width*/, '150px' /*height*/);
			return $spaw->getHtml();
        }
}
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: que_bunt
ошибки такие:
Notice: Undefined variable: spaw_lang_data in z:\home\host.org.ua\www\admin-panel\spaw\class\lang.class.php on line 90

Notice: Undefined variable: spaw_toolbar_data in z:\home\host.org.ua\www\admin-panel\spaw\class\toolbars.class.php on line 156

и дальше в том же стиле только разные переменные.
причем все делаю также как и отдельно в скрипте.
Ну блин, когда ты загружаешь файл внутри функции, то определённые в нём переменные попадают в список переменных этой функции, а не в список глобальных переменных. Отсюда и ошибки. Какого хрена авторы Spaw так написали своё поделие, что не принимают в расчёт возможность загрузки файла внутри функции --- вопрос к авторам Spaw.
 

que_bunt

Новичок
Sad Spirit спасибо большое за помощь. решил проблему установив FCKEditor, правда класс написал по своему, но все вроде работает =)

кстати пока разбирался в документации FCKEditorа нашол клас для интеграции с Quickform на основе Smarty. если кому надо будет - http://wiki.fckeditor.net/Developer's_Guide/Integration/PHP/Quickform
Мне лично не понадобился, но может кому-то.
 
Сверху