Kerm Posted June 18, 2013 Share Posted June 18, 2013 У меня есть модуль который создатет записи в базе под своими Id, с такими полями: Id;id_lang;text В настройках модуля обычная формачка с добавлением новой записи и текста к ней, мне нужно приделать загрузку изображения к каждой записи, выбранный файл не только должен помещаться в нужную папку но еще его имя должно помещаться в базу данных. Кто ни будь может помочь мне это сделать? Как сделать отдельно от престы загрузку изображения и помещения его названия в БД это я знаю, а вот как на уровне модуля для престы..Например там в php файле идет условие, к примеру при submit выполнить проверку условий на корректность введеных данных, далее скопировать информацию из всех полей формы и поместить эту инфу в базу и в этом правиле при submit нету указания на переменные из формы и SQL запросов, в другом файле они отдельно указаны и соотносятся с полем name="" в инпутах, например name="text" это всеравно что $text, а $text это название столбца в MySQL базе.. И тут не могу допереть как реализовать подгрузку изображения к каждой записи -/ Link to comment Share on other sites More sharing options...
absent Posted June 18, 2013 Share Posted June 18, 2013 Посмотри станд. код добавления файла к товару. там всё просто Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 Было бы просто, не спрашивал бы. Link to comment Share on other sites More sharing options...
frozzen Posted June 19, 2013 Share Posted June 19, 2013 Возьмите модуль стандартного слайдера. Это практически полное решение Вашей задачи. Останется только имена таблиц и полей переделать. Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 Возьмите модуль стандартного слайдера. Это практически полное решение Вашей задачи. Останется только имена таблиц и полей переделать. Как раз об этом подумал! Сейчас буду пробовать! absent, твой вариант не подходит потому что там в базу не попадает имя файла, а только его уникальный ID, а имя файла нужно вручную вписывать в соседнем поле и оно уже от туда и берется при выводе на сайте, в общем это все усложняет там.. Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 Блин все равно как то уж слишком сложно, с других модулей не получается перетащить потому что там везде в чем то требуемый функционал другой .. Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 У меня в пхп идет вот такой обработчик нажатия кнопки сохранить: elseif (Tools::getValue('submitAdd'.$this->table)) { $this->validateRules(); if (!sizeof($this->_errors)) { $id = intval(Tools::getValue($this->identifier)); /* Object update */ if (isset($id) AND !empty($id)) { $object = new $this->className($id); if (Validate::isLoadedObject($object)) { $this->copyFromPost($object, $this->table); $result = $object->update(); if (!$result) { $this->_errors[] = Tools::displayError('an error occurred while updating object').' <b>'.$this->table.'</b> ('.Db::getInstance()->getMsgError().')'; } elseif (!sizeof($this->_errors)) { Tools::redirectAdmin($currentIndex . '&conf=4&token='.$token); } } else { $this->_errors[] = Tools::displayError('an error occurred while updating object').' <b>'.$this->table.'</b> '.Tools::displayError('(cannot load object)'); } } /* Object creation */ else { $object = new $this->className(); $this->copyFromPost($object, $this->table); if (!$object->add()) { $this->_errors[] = Tools::displayError('an error occurred while creating object').' <b>'.$this->table.' ('.mysql_error().')</b>'; } elseif (($_POST[$this->identifier] = $object->id) AND !sizeof($this->_errors)) { Tools::redirectAdmin($currentIndex.($parent_id ? '&'.$this->identifier.'='.$object->id : '').'&conf=3&token='.$token); } } } $this->_errors = array_unique($this->_errors); $this->_displayForm(); return $this->_html; } Без понятия куда сюда подсовывать код загрузки изображения... Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 В /* Object update */ после $result = $object->update(); вывел print_r($object), получил: News Object ( [meta_title] => Array ( [6] => Текст [9] => Текст ) [meta_description] => Array ( [6] => Текст [9] => ) [meta_keywords] => Array ( [6] => [9] => ) [img_name] => 252.jpg [description_short] => Array ( [6] => <p><span>Текст</p> [9] => ) [content] => Array ( [6] => <div class="p_cont" style="padding: 15px;">Текст</div> </div> [9] => ) [link_rewrite] => Array ( [6] => durnushki-2 [9] => durnushki-2 ) [status] => 1 [date_add] => 2013-06-18 15:12:44 [date_upd] => 2013-06-19 09:37:22 [id_employee] => 1 [id_category_default] => 1 [fieldsRequiredLang:protected] => Array ( [0] => meta_title [1] => link_rewrite ) [fieldsSizeLang:protected] => Array ( [meta_description] => 255 [meta_keywords] => 255 [meta_title] => 128 [link_rewrite] => 128 [img_name] => 65536 [description_short] => 65536 ) [fieldsValidate:protected] => Array ( [id_employee] => isInt [status] => isBool ) [fieldsValidateLang:protected] => Array ( [meta_description] => isGenericName [meta_keywords] => isGenericName [meta_title] => isGenericName [link_rewrite] => isLinkRewrite [description_short] => isString [img_name] => isString [content] => isString ) [table:protected] => news [identifier:protected] => id_entry [id] => 1 [id_lang:protected] => [fieldsRequired:protected] => Array ( ) [fieldsSize:protected] => Array ( ) [tables:protected] => Array ( ) [webserviceParameters:protected] => Array ( ) [image_dir:protected] => [image_format:protected] => jpg ) Т.е. название картинки 256.jpg есть, но в mysql это название не попадает и куда там вставить код чтобы картинка загружалась не знаю -/ Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 Но, вот если вывести тоже самое внутри функции copyFromPost(): protected function copyFromPost(&$object, $table) { /* Classical fields */ foreach ($_POST AS $key => $value) { if (key_exists($key, $object) AND $key != 'id_'.$table) { $object->{$key} = $value; print_r($object);exit; } } ....................... То получаю уже: News Object ( [meta_title] => Array ( [6] => Текст [9] => Текст ) [meta_description] => Array ( [6] => Текст [9] => ) [meta_keywords] => Array ( [6] => [9] => ) [img_name] => Array ( [6] => g [9] => ) Где img_name идет просто буква g... Link to comment Share on other sites More sharing options...
sors Posted June 19, 2013 Share Posted June 19, 2013 Настройкой объекта можно сделать автоматическое сохранение картинки в папку, правда с идентификатором записи, а не с исходным именем. Ваш код и не должен сохранять имя картинки. Поле файла не содержит в своем значении название файла. Получайте название файла как обычно. Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 Да я не знаю куда что подставлять!! Добавил в шаблон поле: <input type="file" name="img" size="100" /> В: elseif (Tools::getValue('submitAdd'.$this->table)) { ..... } Пытаюсь в разных местах получить название картинки и воткнуть его в переменную и не получается( Вот на это например: $img_name = $_FILES['img']['name']; ругается Notice: Undefined index: img in... Есть вот такой кусок кода из другого модуля и хз куда его поместить чтобы все работало: /* upload the image */ if (isset($_FILES['img_name']) AND isset($_FILES['img_name']['tmp_name']) AND !empty($_FILES['img_name']['tmp_name'])) { /* 102400 bytes = 100KB */ if ($error = checkImage($_FILES['img_name'], $this->maxImageSize)) { $this->_html .= $this->displayError($error); return false; } if (!move_uploaded_file($_FILES['img_name']['tmp_name'], dirname(__FILE__).'/img/'.$_FILES['img_name']['name'])) { $this->_html .= $this->displayError($this->l('Error move uploaded file')); return false; } $namefile = $_FILES['img_name']['name']; }[/size][/font][/color] [color=#000000][font=Arial, Verdana, Helvetica, sans-serif][size=3] if (Tools::getValue('title') == '' OR empty($_FILES['img_name']['name'])) $errors[] = $this->l('You must complete the following fields: title and image.');[/size][/font][/color] [color=#000000][font=Arial, Verdana, Helvetica, sans-serif][size=3] elseif (!preg_match('/.+\.(jpg|png|gif)$/', strtolower($_FILES['img_name']['name']))) $errors[] = $this->l('The format should be only of type: jpg, png, gif'); [/size][/font][/color] [color=#000000][font=Arial, Verdana, Helvetica, sans-serif][size=3] elseif (file_exists(_PS_MODULE_DIR_.$this->name.'/img/'.$_FILES['img_name']['name'])) $errors[] = $this->l('The image file in the directory already exists'); Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 Разобраться самому мазгов в общем не хватило -/ переделал на textarea с TinyMCE и через TinyMCE гружу картинки.. Переделывал модуль newscore для того чтобы в списке новостей выводить свою фотку к каждой новости. Если же, кто ни будь все же сможет помочь переделать на нормальный аплоуд, буду благодарен. Link to comment Share on other sites More sharing options...
sors Posted June 19, 2013 Share Posted June 19, 2013 А чем не нравится картинка с номером? Посмотрите как сделано у производителей Link to comment Share on other sites More sharing options...
Kerm Posted June 19, 2013 Author Share Posted June 19, 2013 Я посмотрю, но пока не уверен что мне там что то поможет, я уделил этому вопросу достаточно времени и смотрел как реализована подргузка картинки настройках категории и загрузка файла к товару и загрузка картинки при создании cms страниц и в модуле вывода текста на главной странице и на сколько я понял код в админских табах отличается от кода в модулях и там много переделывать надо..у админских табов как я понял есть один файл обработчик AdminTab.php в который вынесены все главные функции. В общем покавырялся там в файлах изучил и понял что взять код с админских табов и внедрить в модуль не смогу своими силами, это находиться на грани моего понимания -/ Link to comment Share on other sites More sharing options...
sors Posted June 20, 2013 Share Posted June 20, 2013 Ну так используйте вкладки Link to comment Share on other sites More sharing options...
Recommended Posts