Как сохранять HTML из формы конфигурации модуля?

Автор adamatis, 21 июля 2016, 11:45:26

« назад - далее »

adamatis

Здравствуйте!
Написал свой модуль и админку к нему. В админке есть поле, где хочу вставлять простой HTML код, как сохранять полностью этот код, чтобы преста не резала теги?
Прошу прощенья если это глупый вопрос, но у меня не получилось найти ответа...

Adik

Нужно:
- Объявить тип поля
'type' => 'text',
- Не использовать проверку на теги из класса Validate.

adamatis

А в каком месте сделать это объявление?
У меня форма вынесена в getContent.tpl
вот этот элемент:
<div class="form-group clearfix">
        <label class="col-lg-3">Custom HTML:</label>
        <div>
          <textarea rows="10" cols="45" name="enable_htmlcolor" >
            {if $enable_htmlcolor eq '1'}$enable_htmlcolor{/if}
            {$enable_htmlcolor|@debug_print_var}
            {$confirmation|@debug_print_var}
            success_load = {$success_load|@debug_print_var}
          </textarea>
        </div>
      </div>

Adik

Там где сохраняются данные из формы - в классе, контроллере или модуле.

adamatis

Вот так написал, можно как-то по-другому обработать?

if (Tools::isSubmit('mymod_pc_form'))
{
        Configuration::updateValue('EXTDATAPRODUCT_GRADES', $enable_grades);
        Configuration::updateValue('EXTDATAPRODUCT_HTMLCOLOR', $enable_htmlcolor);
}

Adik

Для хранения html данных создайте свою таблицу.

Миколас


adamatis

версия престы - 1.6
Эмм... допустим, создал свою таблицу.
Придётся как-то запросы писать или есть стандартные методы для использования в модуле?

mAgency

#8
Стандарные это когда создаете свою модель MyModel.php от ObjectModel,
class MyModel extends ObjectModel
{
public static $definition = array(
'table' => 'mytable',
'primary' => 'id',
'multilang' => true,
'fields' => array(
'id' =>       array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'required' => true),
'text' =>    array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml')
),
);

Методы get set
public static function setContent($text = null, $id_lang = null)
{
$content_text = pSQL( $text, true );
$id_lang = (int)$id_lang;
$sql = 'INSERT INTO `'._DB_PREFIX_.self::$definition['table'].'` (`text`,`id_lang`)
VALUES ("'.$text.'","'.$id_lang.'")';

return Db::getInstance()->execute( $sql );
}

public static function getContent($lang)
{
$sql = 'SELECT * FROM '._DB_PREFIX_.self::$definition['table'].' WHERE `id_lang` = "'.(int)$lang.'"';
return Db::getInstance()->getRow($sql);
}

И используте их в своем модуле
MyModel::setContent( Tools::getValue('text'), $this->lang_id );
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

mAgency

Если текст небольшой и часто к нему не обращаются, то можно в таблице конфигурации сохранять
Configuration::updateValue($this->text, Tools::getValue('mytext'));
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

adamatis

Цитата: mAgency от 21 июля 2016, 15:28:10
Если текст небольшой и часто к нему не обращаются, то можно в таблице конфигурации сохранять
Configuration::updateValue($this->text, Tools::getValue('mytext'));

"$this->text" в данном случае на что ссылается?

В таком варианте режутся теги.

mAgency

$this->text
переменная объявленая в классе модуля.

Configuration::updateValue($this->text, Tools::getValue('mytext'));
Теги HTML разрешены. Класс ConfigurationCore (/classes/Configuration.php)
'value' => array('type' => self::TYPE_STRING),
...
/**
   * Update configuration key and value into database (automatically insert if key does not exist)
   *
   * Values are inserted/updated directly using SQL, because using (Configuration) ObjectModel
   * may not insert values correctly (for example, HTML is escaped, when it should not be).
   * @TODO Fix saving HTML values in Configuration model
   *
   * @param string $key Key
   * @param mixed $values $values is an array if the configuration is multilingual, a single string else.
   * @param bool $html Specify if html is authorized in value
   * @param int $id_shop_group
   * @param int $id_shop
   * @return bool Update result
   */
public static function updateValue($key, $values, $html = false, $id_shop_group = null, $id_shop = null)


Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

adamatis

Спасибо за помощь! Надо было ключ добавить чтобы теги не резались)