ps-simpla Posted April 16, 2015 Report Share Posted April 16, 2015 http://s7.hostingkartinok.com/uploads/images/2015/04/c3da1e8098f98e92295be007e113717b.png Часто поднимался вопрос как сделать изображение для поста блога Нам надо:Дополнительно поле type="file" для загрузки файла Возможности:- Загрузка изображения- Удаление изображения- Вывод ссылки изображения в шаблон- Расширение изображений которые можно загружать #0 - Запрос в БД: ALTER TABLE `s_blog` ADD `image` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `name` #1 - \simpla\design\html\post.tplнайдем: $('input[name="date"]').datepicker({ regional:'ru' }); и ниже вставим: $(".images a.delete").click( function() { $("input[name='delete_image']").val('1'); $(this).closest("ul").fadeOut(200, function() { $(this).remove(); }); return false; }); найдем: <!-- Правая колонка свойств товара --> <div id="column_right"> и ниже вставим: <!-- Изображение поста --> <div class="block layer images" style="margin-top: 44px;"> <h2>Изображение поста</h2> <input class='upload_image' name=image type=file> <input type=hidden name="delete_image" value=""> {if $post->image} <ul> <li> <a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a> <img src="../{$config->blog_images_dir}{$post->image}" alt="" /> </li> </ul> {/if} </div> #2 - \simpla\PostAdmin.phpнайдем: class PostAdmin extends Simpla { ниже вставим: private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico'); найдем: else { $this->blog->update_post($post->id, $post); $post = $this->blog->get_post($post->id); $this->design->assign('message_success', 'updated'); } ниже вставим: // Удаление изображения if($this->request->post('delete_image')) { $this->blog->delete_image($post->id); } // Загрузка изображения $image = $this->request->files('image'); if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions)) { $this->blog->delete_image($post->id); move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->blog_images_dir.$image['name']); $this->blog->update_post($post->id, array('image'=>$image['name'])); } $post = $this->blog->get_post(intval($post->id)); #3 - \api\Blog.php найдем: b.name, и рядом вставим (в 2-х случаях): b.image, найдем: $query = $this->db->placehold("DELETE FROM __blog WHERE id=? LIMIT 1", intval($id)); и ниже вставим: $this->delete_image($id); найдем: /* * * Следующий пост * @param $post * */ и выше вставим: // Удалить изображение поста public function delete_image($id) { $id = (array) $id; $query = $this->db->placehold("SELECT image FROM __blog WHERE id in(?@)", $id); $this->db->query($query); $filenames = $this->db->results('image'); if(!empty($filenames)) { $query = $this->db->placehold("UPDATE __blog SET image=NULL WHERE id in(?@)", $id); $this->db->query($query); foreach($filenames as $filename) { $query = $this->db->placehold("SELECT count(*) as count FROM __blog WHERE image=?", $filename); $this->db->query($query); $count = $this->db->result('count'); if($count == 0) { @unlink($this->config->root_dir.$this->config->blog_images_dir.$filename); } } } } #5 - \confing\confing.phpнайдем: ;Изображения категорий categories_images_dir = files/categories/; ниже вставим: ;Изображения блога blog_images_dir = files/blog/; Не забываем создать папку "blog" в папке "file" #4 - вывод в шаблоне {if $post->image}<img src="../{$config->blog_images_dir}{$post->image}" alt="" />{/if} Тоже самое + ресайз by Виталий АнатольевичНесколько изображений для поста блога Quote Link to post Share on other sites
shooroop Posted April 16, 2015 Report Share Posted April 16, 2015 (edited) зачем дублировать было же? линк Edited April 16, 2015 by shooroop Quote Link to post Share on other sites
ps-simpla Posted April 16, 2015 Author Report Share Posted April 16, 2015 Спасибо Quote Link to post Share on other sites
mart Posted April 17, 2015 Report Share Posted April 17, 2015 зачем дублировать было же? линк СпасибоОпубликовал. Альтернативное решение никогда не повредит. Quote Link to post Share on other sites
Gandalf Posted May 10, 2015 Report Share Posted May 10, 2015 Подскажите как сделать ресайз для картинки Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 (edited) подскажите,как сделать изображение для категории статьи?Для статей у меня получилось сделать по вашему примеру.Вот мой порядок действий:0) добавил в бд в таблицу s_article_categories поле для изображений 1) в файл simpla/design/html/article_category.tpl уже есть код // Удаление изображений $(".images a.delete").click( function() { $("input[name='delete_image']").val('1'); $(this).closest("ul").fadeOut(200, function() { $(this).remove(); }); return false; }); + добавил <!-- Правая колонка свойств товара --> <div id="column_right"> <!-- Изображение категории --> <div class="block layer images"> <h2>Изображение категории</h2> <input class='upload_image' name=image type=file> <input type=hidden name="delete_image" value=""> {if $category->image} <ul> <li> <a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a> <img src="../{$config->categories_images_dir}{$category->image}" alt="" /> </li> </ul> {/if} </div> </div> 2)simpla/ArticleCategoryAdmin.phpдобавлена строчка: private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico'); и после else { $this->articles->update_category($category->id, $category); $this->design->assign('message_success', 'updated'); } вставил: // Удаление изображения if($this->request->post('delete_image')) { $this->articles->delete_image($category->id); } // Загрузка изображения $image = $this->request->files('image'); if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions)) { $this->articles->delete_image($category->id); move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->categories_images_dir.$image['name']); $this->categories->update_category($category->id, array('image'=>$image['name'])); } $category = $this->articles->get_category(intval($category->id)); 3)далее если на основе категории то идем в /api/Categories.php??? Подскажите, плиз! Мб надо новый файл создать и засунуть его в api? Edited July 24, 2016 by motya88 Quote Link to post Share on other sites
strukov Posted July 24, 2016 Report Share Posted July 24, 2016 Смотрите в api/Articles.php Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 Смотрите в api/Articles.phpну там я делал, вывод картинок для статей. А сейчас мне надо сделать вывод картинок для категорий статей. Quote Link to post Share on other sites
strukov Posted July 24, 2016 Report Share Posted July 24, 2016 Там и функции категорий в этом файле. Quote Link to post Share on other sites
strukov Posted July 24, 2016 Report Share Posted July 24, 2016 (edited) Изображение для категории статей Запрос в mysql; ALTER TABLE `s_article_categories` ADD `image` VARCHAR(255) NOT NULL AFTER `name`; simpla/design/html/article_category.tpl После: <script> $(function() { Вставляем // Удаление изображений $(".images a.delete").click( function() { $("input[name='delete_image']").val('1'); $(this).closest("ul").fadeOut(200, function() { $(this).remove(); }); return false; }); Далее вставляем в правую колонку, или куда вам удобно. <div class="block layer images" style="margin-top: 44px;"> <h2>Изображение категории</h2> <input class='upload_image' name=image type=file> <input type=hidden name="delete_image" value=""> {if $category->image} <ul> <li> <a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a> <img src="../{$config->article_category_images_dir}{$category->image}" alt="" /> </li> </ul> {/if} </div> confing/config.php ;Изображения категорий статей article_category_images_dir = files/artcatimg/; simpla/ArticleCategoryAdmin.phpПосле class ArticleCategoryAdmin extends Simpla { Вставляем: private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico'); Далее в этом-же файле После $category->meta_description = $this->request->post('meta_description'); Вставляем $category->image = $this->request->post('image'); Далее в этом-же файле После $this->design->assign('message_success', 'updated'); } Вставляем: // Удаление изображения if($this->request->post('delete_image')) { $this->articles->delete_image($category->id); } // Загрузка изображения $image = $this->request->files('image'); if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions)) { $this->articles->delete_image($category->id); move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->article_category_images_dir.$image['name']); $this->articles->update_category($category->id, array('image'=>$image['name'])); } $category = $this->articles->get_category(intval($category->id)); api/Articles.phpПосле c.name category, Вставляем в 2-ух местах c.image, В директории /files создаем папку artcatimg и устанавливаем на неё права 777. Вывод в шаблоне: {if $article_category->image}<img src="../{$config->article_category_images_dir}{$article_category->image}" alt="" />{/if} Возможно написал что-то не верно, не супер-профессионал в php - но работает. Edited July 24, 2016 by strukov Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 d Изображение для категории статей Запрос в mysql; ALTER TABLE `s_article_categories` ADD `image` VARCHAR(255) NOT NULL AFTER `name`; simpla/design/html/article_category.tpl После: <script> $(function() { Вставляем // Удаление изображений $(".images a.delete").click( function() { $("input[name='delete_image']").val('1'); $(this).closest("ul").fadeOut(200, function() { $(this).remove(); }); return false; }); Далее вставляем в правую колонку, или куда вам удобно. <div class="block layer images" style="margin-top: 44px;"> <h2>Изображение категории</h2> <input class='upload_image' name=image type=file> <input type=hidden name="delete_image" value=""> {if $category->image} <ul> <li> <a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a> <img src="../{$config->article_category_images_dir}{$category->image}" alt="" /> </li> </ul> {/if} </div> confing/config.php ;Изображения категорий статей article_category_images_dir = files/artcatimg/; simpla/ArticleCategoryAdmin.phpПосле class ArticleCategoryAdmin extends Simpla { Вставляем: private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico'); Далее в этом-же файле После $category->meta_description = $this->request->post('meta_description'); Вставляем $category->image = $this->request->post('image'); Далее в этом-же файле После $this->design->assign('message_success', 'updated'); } Вставляем: // Удаление изображения if($this->request->post('delete_image')) { $this->articles->delete_image($category->id); } // Загрузка изображения $image = $this->request->files('image'); if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions)) { $this->articles->delete_image($category->id); move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->article_category_images_dir.$image['name']); $this->articles->update_category($category->id, array('image'=>$image['name'])); } $category = $this->articles->get_category(intval($category->id)); api/Articles.phpПосле c.name category, Вставляем в 2-ух местах c.image, В директории /files создаем папку artcatimg и устанавливаем на неё права 777. Вывод в шаблоне: {if $article_category->image}<img src="../{$config->article_category_images_dir}{$article_category->image}" alt="" />{/if} Возможно написал что-то не верно, не супер-профессионал в php - но работает.Спасибо, но выскочили ошибки после того как попытался добавить картинку в категорию статей : Warning: move_uploaded_file(files/artcatimg/6.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in Z:\home\123.ru\www\simpla\ArticleCategoryAdmin.php on line 55Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'Z:\tmp\php3805.tmp' to 'files/artcatimg/6.jpg' in Z:\home\123.ru\www\simpla\ArticleCategoryAdmin.php on line 55 Quote Link to post Share on other sites
strukov Posted July 24, 2016 Report Share Posted July 24, 2016 (edited) в 12:58 обновил инструкцию, сделайте все как написано у меня шаг за шагом.У меня всё отлично работает, пример http://market.uimax.ru/articles/samodel И читайте внимательно ошибки, которые выдает система. "No such file or directory " Edited July 24, 2016 by strukov Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 в 12:58 обновил инструкцию, сделайте все как написано у меня шаг за шагом.У меня всё отлично работает, пример http://market.uimax.ru/articles/samodel И читайте внимательно ошибки, которые выдает система. "No such file or directory "можешь выложить как вывести для статьи?А то у меня получился конфликт статей с категориями статей Quote Link to post Share on other sites
strukov Posted July 24, 2016 Report Share Posted July 24, 2016 (edited) Удалено Edited July 24, 2016 by strukov Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 (edited) ммммм..... можешь все файлы выложить? которые участвуют в выводе изображений для статей и категорий статей? или выложить инструкцию тогда по статьям, потому что по категориям ты выложил. Edited July 24, 2016 by motya88 Quote Link to post Share on other sites
strukov Posted July 24, 2016 Report Share Posted July 24, 2016 Ты что-то явно делаешь не так, потому что решение выше - рабочее, файлы скидывал все которые нужны.Папку создал? В конфиге прописал? Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 просто выложи плиз инструкцию для статей. ТОлько там мог ошибку налепить! Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 Ты что-то явно делаешь не так, потому что решение выше - рабочее, файлы скидывал все которые нужны.Папку создал? В конфиге прописал?Да, конечно) просто там где фотку для категории статьи вроде добавляю там пропадает фотка для статьи Quote Link to post Share on other sites
strukov Posted July 24, 2016 Report Share Posted July 24, 2016 Можешь FTP дать? Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 в 12:58 обновил инструкцию, сделайте все как написано у меня шаг за шагом.У меня всё отлично работает, пример http://market.uimax.ru/articles/samodel И читайте внимательно ошибки, которые выдает система. "No such file or directory "откатил все назад. Убрал где я делал изображение для статей. Решил сперва сделать для категорий статей.Все по инструкции сделал и теперь выдает ошибку Fatal error: Call to undefined method Articles::delete_image() in Z:\home\123.ru\www\simpla\ArticleCategoryAdmin.php on line 54 смотрим эти строчки в них должна быть ошибка: { $this->articles->delete_image($category->id); move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->article_category_images_dir.$image['name']); $this->articles->update_category($category->id, array('image'=>$image['name'])); } Quote Link to post Share on other sites
Noxter Posted July 24, 2016 Report Share Posted July 24, 2016 Попробуйте вместо $this->articles прописать везде $this->blog Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 (edited) Попробуйте вместо $this->articles прописать везде $this->blogтолько в файле simpla\ArticleCategoryAdmin.php? а что это даст? у меня получилось по аналогу с инструкцией в начале получилось вывести картинки для статей. Но не получается для категорий статей((( Edited July 24, 2016 by motya88 Quote Link to post Share on other sites
Kors Posted July 24, 2016 Report Share Posted July 24, 2016 Скорее всего, это тоже даст ошибки, но уже другие... Quote Link to post Share on other sites
Noxter Posted July 24, 2016 Report Share Posted July 24, 2016 Скорее всего, это тоже даст ошибки, но уже другие...И с чего бы это? Если функция удаления изображения прописана в api/Blog.php (как указано в первому посту), то ее выполнять нужно соответственно $this->blog->delete_image. Я нигде в топике не увидел чтобы просили создать или редактировать какой-то файл api/Articles.php, если где-то упоминалось прошу указать где именно. Quote Link to post Share on other sites
motya88 Posted July 24, 2016 Report Share Posted July 24, 2016 (edited) Итак, ниже по шагам я написал как сделал вывод изображений для статей:#0 - Запрос в БД: ALTER TABLE `s_articles` ADD `image` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `name` #1 - \simpla\design\html\article.tplнайдем: $('input[name="date"]').datepicker({ regional:'ru' }); и ниже вставим: $(".images a.delete").click( function() { $("input[name='delete_image']").val('1'); $(this).closest("ul").fadeOut(200, function() { $(this).remove(); }); return false; }); Потом в нужном месте вставим: <!-- Изображение поста --> <div class="block layer images"> <h2>Изображение поста</h2> <input class='upload_image' name=image type=file> <input type=hidden name="delete_image" value=""> {if $article->image} <ul> <li> <a href='#' class="delete"><img src='design/images/cross-circle-frame.png'></a> <img src="../{$config->articles_images_dir}{$article->image}" alt="" /> </li> </ul> {/if} </div> #2 - \simpla\ArticleAdmin.phpнайдем: class ArticleAdmin extends Simpla { ниже вставим: private $allowed_image_extentions = array('png', 'gif', 'jpg', 'jpeg', 'ico'); найдем: else { $this->articles->update_article($article->id, $article); $article = $this->articles->get_article($article->id); $this->design->assign('message_success', 'updated'); } ниже вставим: // Удаление изображения if($this->request->post('delete_image')) { $this->articles->delete_image($article->id); } // Загрузка изображения $image = $this->request->files('image'); if(!empty($image['name']) && in_array(strtolower(pathinfo($image['name'], PATHINFO_EXTENSION)), $this->allowed_image_extentions)) { $this->articles->delete_image($article->id); move_uploaded_file($image['tmp_name'], $this->root_dir.$this->config->articles_images_dir.$image['name']); $this->articles->update_article($article->id, array('image'=>$image['name'])); } $article = $this->articles->get_article(intval($article->id)); #3 - \api\Articles.php Вставил (в 2-х случаях): $query = $this->db->placehold("SELECT a.*, a.image, c.url category_url, c.name category FROM __articles a LEFT JOIN __article_categories c ON c.id = a.category_id $where LIMIT 1"); найдем: $query = $this->db->placehold("DELETE FROM __blog WHERE id=? LIMIT 1", intval($id)); и ниже вставим: $this->delete_image($id); найдем: /* * * Следующий пост * @param $post * */ и выше вставим: // Удалить изображение поста public function delete_image($id) { $id = (array) $id; $query = $this->db->placehold("SELECT image FROM __articles WHERE id in(?@)", $id); $this->db->query($query); $filenames = $this->db->results('image'); if(!empty($filenames)) { $query = $this->db->placehold("UPDATE __articles SET image=NULL WHERE id in(?@)", $id); $this->db->query($query); foreach($filenames as $filename) { $query = $this->db->placehold("SELECT count(*) as count FROM __articles WHERE image=?", $filename); $this->db->query($query); $count = $this->db->result('count'); if($count == 0) { @unlink($this->config->root_dir.$this->config->articles_images_dir.$filename); } } } } #5 - \confing\confing.phpпрописал ;Изображения статей articles_images_dir = files/articles/; Создал папку /files/articles #4 - вывод в шаблоне {if $article->image}<a href="article/{$article->url}" style="background-image:url(/{$config->articles_images_dir}{$article->image});"></a>{/if} ТУТ У МЕНЯ ВСЕ ПОЛУЧИЛОСЬ!!!!КАК ВЫВЕСТИ КАРТИНКУ ДЛЯ КАТЕГОРИИ СТАТЬИ? Edited July 24, 2016 by motya88 Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.