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

Возможность редактирования показа картинок в записях блога.


Перейти к решению Решено Виталий Анатольевич,

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

  • 9 месяцев спустя...

Все работает! Спасибо!
Кроме как вы и заметили картинка не удаляется

Еще вопрос только 1 картинку можно добавлять, как в товаре галерею нельзя?

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

Все работает! Спасибо!

Кроме как вы и заметили картинка не удаляется

Еще вопрос только 1 картинку можно добавлять, как в товаре галерею нельзя?

да.. это решение как превью для блога, можно и галерею, но придется чуть иначе подойти к вопросу - по примеру товаров или перечислением изо в строке изо таблицы базы данных с последующие расшифровкой в скрипте и обработкой в массив и какой смысл в этом для типового решения, когда можно чисто в редакторе приметить для блока с галереей идентификатор или класс и обработать ява скриптом в необходимом вас виде и функциями анимации, предпросмотра и т.п.

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

автору респект, подобное решение у меня давно есть но до ресайза руки не доходили... попробую для последней версии именно это решение, если действительно есть косяк с удалением поправлю и выложу в паблике...

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

автору респект, подобное решение у меня давно есть но до ресайза руки не доходили... попробую для последней версии именно это решение, если действительно есть косяк с удалением поправлю и выложу в паблике...

удаление в админке превью - в post.tpl добавляем

 


	// Удаление изображений
	$(".images a.delete").click( function() {
		$("input[name='delete_image']").val('1');
		$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
		return false;
	});

ща посмотрю что с удалением из директории и при удалении статьи

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

удаление в админке превью - в post.tpl добавляем

 


	// Удаление изображений
	$(".images a.delete").click( function() {
		$("input[name='delete_image']").val('1');
		$(this).closest("ul").fadeOut(200, function() { $(this).remove(); });
		return false;
	});

ща посмотрю что с удалением из директории и при удалении статьи

все нормально работает за исключением удаления ресайзов...для этого вместо 

  public function delete_image($id)
    {
        $query = $this->db->placehold("SELECT image FROM __blog WHERE id=?", intval($id));
        $this->db->query($query);
        $filename = $this->db->result('image');
        if(!empty($filename))
        {
            $query = $this->db->placehold("UPDATE __blog SET image=NULL WHERE id=?", $id);
            $this->db->query($query);
            $query = $this->db->placehold("SELECT count(*) as count FROM __blog WHERE image=? LIMIT 1", $filename);
            $this->db->query($query);
            $count = $this->db->result('count');
            if($count == 0)
            {            
                @unlink($this->config->root_dir.$this->config->original_images_dir.$filename);        
            }
        }
    }

пилим

	/*
	*
	* Удаление изображения статьи
	* @param $id
	*
	*/
	public function delete_image($id)
	{
		$query = $this->db->placehold("SELECT image FROM __blog WHERE id=?", intval($id));
		$this->db->query($query);
		$filename = $this->db->result('image');
		if(!empty($filename))
		{
			$query = $this->db->placehold("UPDATE __blog SET image=NULL WHERE id=?", $id);
			$this->db->query($query);
			$query = $this->db->placehold("SELECT count(*) as count FROM __blog WHERE image=? LIMIT 1", $filename);
			$this->db->query($query);
			$count = $this->db->result('count');
			if($count == 0)
			{			
				$file = pathinfo($filename, PATHINFO_FILENAME);
				$ext = pathinfo($filename, PATHINFO_EXTENSION);
				
				// Удалить все ресайзы
				$rezised_images = glob($this->config->root_dir.$this->config->post_images_dir.$file.".*x*.".$ext);
				if(is_array($rezised_images))
				foreach (glob($this->config->root_dir.$this->config->post_images_dir.$file.".*x*.".$ext) as $f)
					@unlink($f);

				@unlink($this->config->root_dir.$this->config->original_images_dir.$filename);		
			}
		}
	}	

а также вместо

	public function delete_post($id)
	{
		if(!empty($id))
		{
			$query = $this->db->placehold("DELETE FROM __blog WHERE id=? LIMIT 1", intval($id));
			if($this->db->query($query))
			{
				$query = $this->db->placehold("DELETE FROM __comments WHERE type='blog' AND object_id=?", intval($id));
				if($this->db->query($query))
					return true;
			}							
		}
		return false;
	}

пилим по тому же принципу

	public function delete_post($id)
	{
		if(!empty($id))
		{			
			$query = $this->db->placehold("DELETE FROM __blog WHERE id=? LIMIT 1", intval($id));
			if($this->db->query($query))
			{
				$query = $this->db->placehold("DELETE FROM __comments WHERE type='blog' AND object_id=?", intval($id));
				if($this->db->query($query))
					return true;
			}							
		}
		if(!empty($filename))
		{
			$query = $this->db->placehold("UPDATE __blog SET image=NULL WHERE id=?", $id);
			$this->db->query($query);
			$query = $this->db->placehold("SELECT count(*) as count FROM __blog WHERE image=? LIMIT 1", $filename);
			$this->db->query($query);
			$count = $this->db->result('count');
			if($count == 0)
			{			
				$file = pathinfo($filename, PATHINFO_FILENAME);
				$ext = pathinfo($filename, PATHINFO_EXTENSION);
				
				// Удалить все ресайзы
				$rezised_images = glob($this->config->root_dir.$this->config->post_images_dir.$file.".*x*.".$ext);
				if(is_array($rezised_images))
				foreach (glob($this->config->root_dir.$this->config->post_images_dir.$file.".*x*.".$ext) as $f)
					@unlink($f);

				@unlink($this->config->root_dir.$this->config->original_images_dir.$filename);		
			}
		}		
		return false;
	}

вроде так.... версия симплы последняя, работоспособность проверена, все норм, но разумеется не копированием файлов - действуйте по инструкции.... Для тех кто копирует - напоминаю о конфиге, который тож нужно изменить, но его нет в архиве по понятным причинам... всем удачи))) автору еще раз респект...

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

Работа проделана полезная, автору благодарность.

Но только не проще ли бы уже сделать сразу ресайз общий, чтоб работал и для категорий и для прочих? Принципиальных трудностей вроде бы быть не должно. А то сейчас получается копирование кода с небольшим изменением параметров. Оно, конечно, практически работает, но очень уж некрасиво...

И трудозатраты на общий ресайз, ИМХО, были бы не намного выше, чем у этой разработки. А уж польза-то была бы неизмеримо выше...

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

Работа проделана полезная, автору благодарность.

Но только не проще ли бы уже сделать сразу ресайз общий, чтоб работал и для категорий и для прочих? Принципиальных трудностей вроде бы быть не должно. А то сейчас получается копирование кода с небольшим изменением параметров. Оно, конечно, практически работает, но очень уж некрасиво...

И трудозатраты на общий ресайз, ИМХО, были бы не намного выше, чем у этой разработки. А уж польза-то была бы неизмеримо выше...

ты прав, но как расширение функционала пусть будет отдельный обработчик, который впоследствии можно будет применить не только конкретно к блогу но и к подобным модулям (новости, история и т.п.) а также в целом где необходимо превью.... да и потом, я, к примеру, не расширяю существующую форму обратной связи, а как правило добавляю свою, если она отличается от дефолтной... да, отдельным файлом, но когда заказчик просит что то изменить в ней - мне проще работать с собственным файлом... плюс при последующем обновлении движка эти файлы (поскольку они отдельные) не будут затронуты, а это значит что именно с твоими доработками ничего не случится и никто не станет на тебя гнать не по делу - ты сам знаешь как это бывает....

Ссылка на сообщение
Поделиться на другие сайты
  • 6 месяцев спустя...

Нашёл не дописанный кусок в пункте 9 предоставленной инструкции.

 

Кроме "В файле "api/Design.php" добавляем плагин для смарти в __construct (там где и остальные)"

 

А именно это:

		$this->smarty->cache_dir = 'cache';
		
		$this->smarty->registerPlugin('modifier', 'resize', array($this, 'resize_modifier'));		
		$this->smarty->registerPlugin('modifier', 'token', array($this, 'token_modifier'));
		$this->smarty->registerPlugin('modifier', 'plural', array($this, 'plural_modifier'));		
		$this->smarty->registerPlugin('function', 'url', array($this, 'url_modifier'));		
		$this->smarty->registerPlugin('modifier', 'first', array($this, 'first_modifier'));		
		$this->smarty->registerPlugin('modifier', 'cut', array($this, 'cut_modifier'));		
		$this->smarty->registerPlugin('modifier', 'date', array($this, 'date_modifier'));		
		$this->smarty->registerPlugin('modifier', 'time', array($this, 'time_modifier'));

Заменить на это:

		$this->smarty->cache_dir = 'cache';
		
		$this->smarty->registerPlugin('modifier', 'resizepost', array($this, 'resize_modifier_post'));
		$this->smarty->registerPlugin('modifier', 'resize', array($this, 'resize_modifier'));		
		$this->smarty->registerPlugin('modifier', 'token', array($this, 'token_modifier'));
		$this->smarty->registerPlugin('modifier', 'plural', array($this, 'plural_modifier'));		
		$this->smarty->registerPlugin('function', 'url', array($this, 'url_modifier'));		
		$this->smarty->registerPlugin('modifier', 'first', array($this, 'first_modifier'));		
		$this->smarty->registerPlugin('modifier', 'cut', array($this, 'cut_modifier'));		
		$this->smarty->registerPlugin('modifier', 'date', array($this, 'date_modifier'));		
		$this->smarty->registerPlugin('modifier', 'time', array($this, 'time_modifier'));

 

Нужно добавить перед этим:

	public function resize_modifier($filename, $width=0, $height=0, $set_watermark=false)
	{
		$resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark);
		$resized_filename_encoded = $resized_filename;
		
		if(substr($resized_filename_encoded, 0, 7) == 'http://')
			$resized_filename_encoded = rawurlencode($resized_filename_encoded);

		$resized_filename_encoded = rawurlencode($resized_filename_encoded);

		return $this->config->root_url.'/'.$this->config->resized_images_dir.$resized_filename_encoded.'?'.$this->config->token($resized_filename);
	}

Следующее:

	public function resize_modifier_post($filename, $width=0, $height=0, $set_watermark=false,$crop = false)
	{
		$resized_filename = $this->image->add_resize_params($filename, $width, $height, $set_watermark, $crop);
		$resized_filename_encoded = $resized_filename;		
		if(substr($resized_filename_encoded, 0, 7) == 'http://')
			$resized_filename_encoded = rawurlencode($resized_filename_encoded);
		$resized_filename_encoded = rawurlencode($resized_filename_encoded);
		return $this->config->root_url.'/'.$this->config->post_images_dir.$resized_filename_encoded.'?'.$this->config->token($resized_filename);
	}
Ссылка на сообщение
Поделиться на другие сайты

Возникла еще одна проблема, картинки не отображались, если адрес сайта начинается с https://

 

Для этого заменил содержимое resize/resizepost.php на:

 

<?php


chdir('..');
require_once('api/Simpla.php');

$filename = $_GET['file'];
$token = $_GET['token'];

$filename = str_replace('%2F', '/', $filename);

//if(substr($filename, 0, 6) == 'http:/')
//	$filename = 'http://'.substr($filename, 6);


$simpla = new Simpla();

if(!$simpla->config->check_token($filename, $token))
	exit('bad token');		

$resized_filename =  $simpla->image->resize($filename);
//if(is_readable($resized_filename))
//	header('Location: '.$_SERVER['REQUEST_URI']);

if(is_readable($resized_filename))
{
	header('Content-type: image');
	print file_get_contents($resized_filename);
}

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

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

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

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

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

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

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

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

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

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