Jump to content

Изображение для поста блога


Recommended Posts

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 Виталий Анатольевич
Несколько изображений для поста блога

Link to post
Share on other sites
  • Replies 59
  • Created
  • Last Reply

Top Posters In This Topic

  • 4 weeks later...
  • 1 year later...

подскажите,как сделать изображение для категории статьи?Для статей у меня получилось сделать по вашему примеру.

Вот мой порядок действий:

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 by motya88
Link to post
Share on other sites

Смотрите в api/Articles.php

ну там я делал, вывод картинок для статей. А сейчас мне надо сделать вывод картинок для категорий статей. 

Link to post
Share on other sites

Изображение для категории статей

 

Запрос в 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 by strukov
Link to post
Share on other sites

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 55

Warning: 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

Link to post
Share on other sites

в 12:58 обновил инструкцию, сделайте все как написано у меня шаг за шагом.

У меня всё отлично работает, пример http://market.uimax.ru/articles/samodel

 

И читайте внимательно ошибки, которые выдает система. "No such file or directory "

Edited by strukov
Link to post
Share on other sites

в 12:58 обновил инструкцию, сделайте все как написано у меня шаг за шагом.

У меня всё отлично работает, пример http://market.uimax.ru/articles/samodel

 

И читайте внимательно ошибки, которые выдает система. "No such file or directory "

можешь выложить как вывести для статьи?

А то у меня получился конфликт статей с категориями статей

Link to post
Share on other sites

ммммм..... можешь все файлы выложить? которые участвуют в выводе изображений для статей и категорий статей?

 

или выложить инструкцию тогда по статьям, потому что по категориям ты выложил. 

Edited by motya88
Link to post
Share on other sites

Ты что-то явно делаешь не так, потому что решение выше - рабочее, файлы скидывал все которые нужны.

Папку создал? В конфиге прописал?

Link to post
Share on other sites

Ты что-то явно делаешь не так, потому что решение выше - рабочее, файлы скидывал все которые нужны.

Папку создал? В конфиге прописал?

Да, конечно) просто там где фотку для категории статьи вроде добавляю там пропадает фотка для статьи

Link to post
Share on other sites

в 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']));
				}
Link to post
Share on other sites

Попробуйте вместо $this->articles прописать везде $this->blog

только в файле simpla\ArticleCategoryAdmin.php? а что это даст?

 

у меня получилось по аналогу с инструкцией в начале получилось вывести картинки для статей. Но не получается для категорий статей(((

Edited by motya88
Link to post
Share on other sites

Скорее всего, это тоже даст ошибки, но уже другие...

И с чего бы это?

Если функция удаления изображения прописана в api/Blog.php (как указано в первому посту), то ее выполнять нужно соответственно $this->blog->delete_image.

Я нигде в топике не увидел чтобы просили создать или редактировать какой-то файл api/Articles.php, если где-то упоминалось прошу указать где именно.

Link to post
Share on other sites

Итак, ниже по шагам я написал как сделал вывод изображений для статей:

#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 by motya88
Link to post
Share on other sites
×
×
  • Create New...