Сделать поля в модуле Homeslider необязательными

sol_los

Мой дом здесь!
Регистрация
17 Окт 2011
Сообщения
424
Реакции
278
Так и не нашел нормальный скроллер Html блоков для престы.

Шатаю модуль homeslider, сделал из него скроллер, допилю выложу.

Хочу сделать поля Url и заголовок в слайдах не обязательными.

Если в homeslider.php закомментировать в валидаторе строки, на примере поля legend:
PHP:
            if (Tools::strlen(Tools::getValue('legend_'.$id_lang_default)) == 0)
                $errors[] = $this->l('The caption is not set.');
            if (Tools::strlen(Tools::getValue('url_'.$id_lang_default)) == 0)
                $errors[] = $this->l('The URL is not set.');

при сохранении получаю ошибку:
PHP:
Property HomeSlide->legend is empty
at line 887 in file classes/ObjectModel.php

881.
882.                 $message = $this->validateField($field, $value, $id_lang);
883.                 if ($message !== true)
884.                 {
885.                     if ($die)
886.                         throw new PrestaShopException($message);
887.                     return $error_return ? $message : false;
888.                 }
889.             }
890.         }


если перед добавкой параметра в объект перед сохранением:
PHP:
$slide->url[$language['id_lang']] = Tools::getValue('url_'.$language['id_lang']);
$slide->legend[$language['id_lang']] = Tools::getValue('legend_'.$language['id_lang']);

сделать проверку на ноль и добавлять хотя бы пробел - все прокатывает:
PHP:
if (Tools::getValue('legend_'.$language['id_lang']) == 0){
$slide->legend[$language['id_lang']] = '  ';
}else{
$slide->legend[$language['id_lang']] = Tools::getValue('legend_'.$language['id_lang']);
}

но тогда не получится в шаблоне использовать условие на присутствие legend, можно конечно на пробел проверять, но это вообще костылина

что подскажут спецы?
 
если еще найдутся такие спецалисты как я - советую в выходной день все же отдыхать

ответ:
смотрим на пример textarea description, которое необязательное, и комментируем строки проверяющие на 0

PHP:
//            $id_lang_default = (int)Configuration::get('PS_LANG_DEFAULT');
//            if (Tools::strlen(Tools::getValue('title_'.$id_lang_default)) == 0)
//                $errors[] = $this->l('The title is not set.');
//            if (Tools::strlen(Tools::getValue('legend_'.$id_lang_default)) == 0)
//                $errors[] = $this->l('The caption is not set.');
//            if (Tools::strlen(Tools::getValue('url_'.$id_lang_default)) == 0)
//                $errors[] = $this->l('The URL is not set.');
//            if (!Tools::isSubmit('has_picture') && (!isset($_FILES['image_'.$id_lang_default]) || empty($_FILES['image_'.$id_lang_default]['tmp_name'])))
//                $errors[] = $this->l('The image is not set.');
//            if (Tools::getValue('image_old_'.$id_lang_default) && !Validate::isFileName(Tools::getValue('image_old_'.$id_lang_default)))
//                $errors[] = $this->l('The image is not set.');

а в объекте модели видим
PHP:
'url' =>            array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isUrl', 'required' => true, 'size' => 255),
'description' =>                array('type' => self::TYPE_HTML,   'lang' => true, 'validate' => 'isCleanHtml', 'size' => 4000),
следовательно

'required' => true - удаляем
 
Назад
Сверху