Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 59
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

  • 4 недели спустя...
  • 1 год спустя...

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

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

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?

Изменено пользователем motya88
Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

Запрос в 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 - но работает.

Изменено пользователем strukov
Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Изменено пользователем strukov
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем motya88
Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

в 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']));
				}
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Изменено пользователем motya88
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

#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}

 

ТУТ У МЕНЯ ВСЕ ПОЛУЧИЛОСЬ!!!!

КАК ВЫВЕСТИ КАРТИНКУ ДЛЯ КАТЕГОРИИ СТАТЬИ?

Изменено пользователем motya88
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...