Автоматический ресайз мини-изображений в virtuemart 1.1

2013-09-30
4.8 / 5 (5 голосов)

На сегодняшний день в интернет есть очень много интернет-магазинов на joomla + virtuemart. Но то как написан сам компонент virtuemart - это просто ужас. Да он бесплатный, под него много плагинов и разных хаков, но вот про самые элементарные вещи они просто забыли или им было лень? Так вот одна из самых частых ситуаций, вы сменили дизайн и вам теперь надо, что бы мини-изображения имели другой размер. По нормальному, как это сделано например в компоненте "phoca gallery" есть кнопка пересоздать мини-изображения, а тут её нет. Поэтому я сделал простенький скрипт, в который вы вводите новые размеры мини-изображений (ширину, высоту) и нажимаете кнопку старт, все остальное сделает скрипт за вас. 

 

Собственно описывать нечего, в самом скрипте достаточно описания.

Единственное, что подмечу, данный скрипт тестировался на Joomla 1.5 + Virtuemart 1.1

В самом низу вы можете скачать сам скрипт.

<?
/*
author - GAAlferov
site - http://gaalferov.com
*/

error_reporting(-1); // show all error

// Подключем все необходимые файлы
if (!defined('_JEXEC')) {
		/*** Joomla part ***/
        define( '_JEXEC', 1 );
        define('JPATH_BASE', dirname(__FILE__) );
        define( 'DS', DIRECTORY_SEPARATOR );
        /* Required Files */
        require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
        require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
        /* To use Joomla's Database Class */
        require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );
        require_once ( JPATH_LIBRARIES.DS.'joomla'.DS.'import.php');
        /* Create the Application */
        $app = JFactory::getApplication('site')->initialise();
		/*** Joomla part ***/
		
		/*** VirtueMart part ***/
			require_once(JPATH_BASE.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'virtuemart.cfg.php');
			require_once( CLASSPATH. 'ps_main.php');

			require_once( CLASSPATH. "language.class.php" );

			/* Load the VirtueMart database class */
			require_once( CLASSPATH. 'ps_database.php' );
		/*** END VirtueMart part ***/
    }
	
	function small_image($sizex,$sizey) { //Функция создание миниатур
		//Подключаем класс обработки изображения
		include(JPATH_BASE.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'classes'.DS.'class.img2thumb.php');
		//Коннект с БД
		$db =& JFactory::getDBO();
		$sql = "SELECT * FROM `#__vm_product`";
		$db->setQuery($sql);
		$rows = $db->loadAssocList();
		//Создание новых мини-изображений
		foreach ($rows as &$row) {
			if ($row["product_full_image"]) {
				$filename = JPATH_BASE.DS."components".DS."com_virtuemart".DS."shop_image".DS."product".DS.$row["product_full_image"];
				//если файл существует
				if (file_exists( $_SERVER['DOCUMENT_ROOT'].DS."components".DS."com_virtuemart".DS."shop_image".DS."product".DS.$row["product_full_image"])) { 
					$fileinfo = pathinfo( $filename );
					$file = str_replace(".".$fileinfo['extension'], "", $fileinfo['basename']);
					$ext = ".jpg";
					//Формируем имя выходного файла
					$fileout_name = "resized".DS.$file."__".$sizex."x".$sizey.$ext;
					//Формируем путь выходного файла
					$fileout_small_patch = JPATH_BASE.DS."components".DS."com_virtuemart".DS."shop_image".DS."product".DS.$fileout_name;
					//Update таблицы
					$sql_update = "UPDATE `#__vm_product` SET `product_thumb_image` = '{$fileout_name}' WHERE `product_id`='{$row["product_id"]}'";
					$db->setQuery($sql_update);
					$db->query();
					//Стандартные настройки функции virtuemart
					$maxsize = false;
					$bgred = 255;
					$bggreen = 255;
					$bgblue = 255;
					// создаем экземпляры класса. По сути - передаем все необходимые данные для создания эскизов
					$new_image_small = new Img2Thumb($filename,$sizex,$sizey,$fileout_small_patch,$maxsize,$bgred,$bggreen,$bgblue);
					
					echo 'Create small image -  "'.$fileout_name.'" completed.<br />';
				} else { 
					//имя файла есть в БД, но физически он отсутствует
					echo '<b>ERROR!!! File - .  '.$row["product_full_image"].' exist on directory.</b><br />';
				}
			} else {
				//у товара нет большой картинки
				echo '<b>ERROR!!! Product_id - .  '.$row["product_id"].' dont have big image.</b><br />';
			}
		} // end foreach
	}
	

	$sizex = JRequest::getVar('sizex'); //Ширина мини-изображения
	$sizey = JRequest::getVar('sizey'); //Высота мини-изображения
	
if (isset($sizex)) {
	$work = small_image($sizex,$sizey);
} else {
	echo '
	<form  action=""  method="post">
			Ширина мини-изображения: <br />
			<input type="text" name="sizex" placeholder="'.PSHOP_IMG_WIDTH.'" value="'.PSHOP_IMG_WIDTH.'" required><br /><br />
			Высота мини-изображения:<br />
			<input type="text" name="sizey" placeholder="'.PSHOP_IMG_HEIGHT.'" value="'.PSHOP_IMG_HEIGHT.'" required><br />
			<input class="but"  type="submit" value="Поехали!">
		</form>';
	
}
?>

 

 

Прочитано 1561 раз Последнее изменение 2015-10-17

1 Комментарий

  • ПаЛыЧ
    ПаЛыЧ 2016-04-21

    В строках 26-30 добавь $_SERVER['DOCUMENT_ROOT']. перед CLASSPATH

    Раньше работало вроде и без этого :) 

Оставить комментарий

Все поля отмеченные (*) обязательны для заполнения