Модуль watermark для webAsyst Shop-script

+7 (499) 4ОЗ-1O-6З
+38 (044) 331-06-38
Пн Вт Ср Чт Пт Сб Вс
с 10:00 до 16:00 GMT+2
Мы в социальных сетях Все контакты
Товаров: 0
На сумму: 0.00 $
Перейти в корзину

Модуль watermark для webAsyst Shop-script версия 1.0

  Купить

Модуль наложения водяного знака на фотографии товаров для webAsyst Shop-script.

Цель модуля - массовое изменение размеров фотографий и наложение на них водяного знака.

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

Возможности модуля Watermark для webAsyst Shop-script:

  • Массовое пересоздание фотографий товаров
    Если вам нужно изменить размеры маленьких или средних фотографий для всех товаров, это делается очень просто и быстро. Зайдите в раздел модуля Watermark, укажите размеры фотографий, файл водяного знака, выберите размещение водяного знака на фотографии, посмотрите фотографию-пример, и запустите массовое пересоздание фотографий товаров.
  • Создание вотермарков при сохранении товара в админке
    В ходе добавления/редактиирования товара в админке, будут созданы фотографии товаров исходя из настроек нашего модуля (размеры, файл водяного знака, расположение водяного знака).

Скриншот настроек модуля в админке:

ВНИМАНИЕ!
Установка модуля выполняется в ручном режиме. Вам необходимо обладать минимальными знаниями по работе с ftp-менеджером, php, html, javascript, css. Если вы не уверены в своих знаниях, пожалуйста, доверьтесь специалистам из тех. поддержки SiteProf.net. Программисты SiteProf.net выполнят установку модуля бесплатно.

После оплаты вы получите архив, в архиве файл readme.txt и папка www. Содержимое папки www нужно залить в корневую папку сайта посредством ftp-менеджера.

Далее открываем браузер, и переходим по адресу www.ваш_сайт.ru/webAsystWatermarkInstall проверяем совместимость модуля,и если всё в порядке, то нажимаем кнопку "Установить", если же некоторые файлы отсутствуют - то проверьте целостность модуля, и обратитесь в нашу тех-поддержку за помощью.

Нажимаем кнопку Установить

Модуль успешно установлен. Зайдите в админ панель в раздел "Дизайн" -> "Языки и перевод" -> Выберите ваш язык и нажмите "Редактировать перевод". Опуститесь в самый низ и нажмите "сохранить".

Ручная установка
Ниже руководство по ручной установке модуля, нужно отредактировать несколько системных файлов интернет магазина.
Перед установкой обязательно сделайте резервную копию каждого файла, который вы будете редактировать.

published/SC/html/scripts/includes/init.php
После
include_once(DIR_FUNC.'/db_functions.php' );
Добавить
require_once(DIR_FUNC.'/webAsystWatermark_functions.php');
published/SC/html/scripts/modules/products/_methods/b_product_settings.php
Функцию
function upload_picture($action_source = ACTCTRL_AJAX){...}
Заменить на
	function upload_picture($action_source = ACTCTRL_AJAX){

		
		$Register = &Register::getInstance();
		$FilesVar = &$Register->get(VAR_FILES);
		$FilesPostVar = &$Register->get(VAR_POST);
		$error = null;

		do{


			if(
			isset($FilesPostVar['image_source'])&&
			($FilesPostVar['image_source'] == 'file')&&
			isset($FilesVar['upload_picture'])&&
			isset($FilesVar['upload_picture']['name'])&&
			strlen($FilesVar['upload_picture']['name'])){
				$file_name = $FilesVar['upload_picture']['name'];
			}elseif(
			isset($FilesPostVar['image_source'])&&
			($FilesPostVar['image_source'] == 'url')&&
			isset($FilesPostVar['upload_picture_url'])
			&&strlen($FilesPostVar['upload_picture_url'])
			&&($FilesPostVar['upload_picture_url']!='URL')
			&&($FilesPostVar['upload_picture_url']!='http://')){

				$file_info = pathinfo($FilesPostVar['upload_picture_url']);
				$file_name = $file_info['basename'];
			}elseif($action_source == ACTCTRL_AJAX){
				$error = PEAR::raiseError(translate('str_image_not_uploaded'));
				break;
			}else{
				return;
			}

			if(!is_image($file_name)){
				$error = PEAR::raiseError(translate('prdset_msg_onlyimages'));
				break;
			}
			//print $file_name."\n";
			$file_name = xStripSlashesGPC($file_name);
			//print 'stripslashes: '.$file_name."\n";
			$file_name = str_replace('#','',urldecode($file_name));
			//print 'urldecode: '.$file_name."\n";

			if(file_exists(DIR_PRODUCTS_PICTURES.'/'.$file_name))
			$file_name = getUnicFile(2, preg_replace('@\.([^\.]+)$@', '%s.$1', $file_name), DIR_PRODUCTS_PICTURES);

			$orig_file = DIR_TEMP.'/'.getUnicFile(4, '%s', DIR_TEMP);
			if(isset($FilesVar['upload_picture'])&&strlen($FilesVar['upload_picture']['name'])){
				if(PEAR::isError($res = File::checkUpload($FilesVar['upload_picture']))||
					PEAR::isError($res = Functions::exec('file_move_uploaded', array($FilesVar['upload_picture']["tmp_name"], $orig_file)))
				){
				/*$res = Functions::exec('file_move_uploaded', array($FilesVar['upload_picture']['tmp_name'], $orig_file));
				if(PEAR::isError($res)){*/
					$error = $res;
					break;
				}
			}elseif(isset($FilesPostVar['upload_picture_url'])&&strlen($FilesPostVar['upload_picture_url'])){
				$res = Functions::exec('file_copy', array($FilesPostVar['upload_picture_url'], $orig_file));
				if(PEAR::isError($res)){
					$error = $res;
					break;
				}
			}
			
			if(!file_exists($orig_file)){
				$error = PEAR::raiseError("{$orig_file} not found", 1);
				break;
			}

			
		
			/**
			 * Standard picture
			 */
			$temp_file = DIR_TEMP.'/'.getUnicFile(4, 'img.s.%s.temp', DIR_TEMP);
			$standard_file_name = $file_name;

			if(file_exists(DIR_PRODUCTS_PICTURES.'/'.$standard_file_name))
			$standard_file_name = getUnicFile(2, preg_replace('@\.([^\.]+)$@', '%s.$1', $file_name), DIR_PRODUCTS_PICTURES);

			if(
			PEAR::isError($res = Functions::exec('img_resize', array($orig_file, CONF_PRDPICT_STANDARD_SIZE, CONF_PRDPICT_STANDARD_SIZE, $temp_file)))
			||
			PEAR::isError($res = Functions::exec('file_copy', array($temp_file, DIR_PRODUCTS_PICTURES.'/'.$standard_file_name)))
			){
				$error = $res;
				if(file_exists($temp_file)){
					unlink($temp_file);
				}
				Functions::exec('file_remove', array($orig_file));
				break;
			}
			if(file_exists($temp_file)){
				unlink($temp_file);
			}

			/**
			 * Thumbnail picture
			 */
			$temp_file = DIR_TEMP.'/'.getUnicFile(4, 'img.t.%s.temp', DIR_TEMP);
			$thumbnail_file_name = preg_replace('@\.([^\.]+)$@', '_thm.$1', $file_name);
			if(file_exists(DIR_PRODUCTS_PICTURES.'/'.$thumbnail_file_name))
			$thumbnail_file_name = getUnicFile(2, preg_replace('@\.([^\.]+)$@', '%s.$1', $thumbnail_file_name), DIR_PRODUCTS_PICTURES);

			if(
			PEAR::isError($res = Functions::exec('img_resize', array($orig_file, CONF_PRDPICT_THUMBNAIL_SIZE, CONF_PRDPICT_THUMBNAIL_SIZE, $temp_file)))
			||
			PEAR::isError($res = Functions::exec('file_copy', array($temp_file, DIR_PRODUCTS_PICTURES.'/'.$thumbnail_file_name)))
			){
				$error = $res;
				if(file_exists($temp_file)){
					unlink($temp_file);
				}
				Functions::exec('file_remove', array($orig_file));
				Functions::exec('file_remove', array(DIR_PRODUCTS_PICTURES.'/'.$standard_file_name));
				break;
			}
			if(file_exists($temp_file)){
				unlink($temp_file);
			}

			/**
			 * Enlarged picture
			 */
			$temp_file = DIR_TEMP.'/'.getUnicFile(4, 'img.e.%s.temp', DIR_TEMP);
			$orig_size = getimagesize($orig_file);
			$standard_size = getimagesize(DIR_PRODUCTS_PICTURES.'/'.$standard_file_name);
			
			if(($orig_size[0]>$standard_size[0]) || ($orig_size[1]>$standard_size[1])){

				$enlarged_file_name = preg_replace('@\.([^\.]+)$@', '_enl.$1', $file_name);
				if(file_exists(DIR_PRODUCTS_PICTURES.'/'.$enlarged_file_name))
				$enlarged_file_name = getUnicFile(2, preg_replace('@\.([^\.]+)$@', '%s.$1', $enlarged_file_name), DIR_PRODUCTS_PICTURES);

				if(
				PEAR::isError($res = Functions::exec('img_resize', array($orig_file, CONF_PRDPICT_ENLARGED_SIZE, CONF_PRDPICT_ENLARGED_SIZE, $temp_file)))
				||
				PEAR::isError($res = Functions::exec('file_copy', array($temp_file, DIR_PRODUCTS_PICTURES.'/'.$enlarged_file_name)))
				){
					$error = $res;
					if(file_exists($temp_file)){
						unlink($temp_file);
					}
					Functions::exec('file_remove', array($orig_file));
					Functions::exec('file_remove', array(DIR_PRODUCTS_PICTURES.'/'.$enlarged_file_name));
					Functions::exec('file_remove', array(DIR_PRODUCTS_PICTURES.'/'.$standard_file_name));
					Functions::exec('file_remove', array(DIR_PRODUCTS_PICTURES.'/'.$thumbnail_file_name));
					break;
				}
			}else {

				$enlarged_file_name = '';
			}
			if(file_exists($temp_file)){
				unlink($temp_file);
			}

			$product = GetProduct($this->getData('productID'));
			if(!isset($product['productID'])||!$product['productID']){
				$this->setData('productID', prdCreateEmptyProduct());
			}
			db_phquery("
				INSERT ?#PRODUCT_PICTURES (productID, filename, thumbnail, enlarged, priority)
				VALUES( ?, ?, ?, ?,?)", $this->getData('productID'), $standard_file_name, $thumbnail_file_name, $enlarged_file_name,$this->getData('upload_picture_priority'));

			/*db_phquery("
			 INSERT ?#PRODUCT_PICTURES (productID, filename, thumbnail, enlarged)
			 VALUES( ?, ?, ?, ?)", $this->getData('productID'), $standard_file_name, $thumbnail_file_name, $enlarged_file_name);
			 */
			global $_RESULT;
			global $DB_KEY;

			$_RESULT['picture']['photoID'] = db_insert_id();
			$_RESULT['picture']['thumbnail_url'] =  URL_PRODUCTS_PICTURES.'/'.$thumbnail_file_name;

			$_RESULT['picture']['thumbnail_picture']['file'] = $thumbnail_file_name;
			$_RESULT['picture']['thumbnail_picture']['size'] =sprintf('%0.0f kB',round(filesize(DIR_PRODUCTS_PICTURES.'/'.$thumbnail_file_name)/1024));
			$_RESULT['picture']['thumbnail_picture']['url'] = URL_PRODUCTS_PICTURES.'/'.$thumbnail_file_name;
			list($_RESULT['picture']['thumbnail_picture']['width'], $_RESULT['picture']['thumbnail_picture']['height']) = getimagesize(DIR_PRODUCTS_PICTURES.'/'.$thumbnail_file_name);

			/*if($this->getData('set_default')){

				prdSetProductDefaultPicture($this->getData('productID'), $_RESULT['picture']['photoID']);
				$_RESULT['picture']['is_default'] = 1;
			}*/

			$_RESULT['picture']['large_picture']['file'] = $standard_file_name;
			$_RESULT['picture']['large_picture']['size'] =sprintf('%0.0f kB',round(filesize(DIR_PRODUCTS_PICTURES.'/'.$standard_file_name)/1024));
			$_RESULT['picture']['large_picture']['url'] = URL_PRODUCTS_PICTURES.'/'.$standard_file_name;
			list($_RESULT['picture']['large_picture']['width'], $_RESULT['picture']['large_picture']['height']) = getimagesize(DIR_PRODUCTS_PICTURES.'/'.$standard_file_name);

			if($enlarged_file_name){
				$_RESULT['picture']['enlarged_picture']['file'] = $enlarged_file_name;
				$_RESULT['picture']['enlarged_picture']['size'] =sprintf('%0.0f kB',round(filesize(DIR_PRODUCTS_PICTURES.'/'.$enlarged_file_name)/1024));
				$_RESULT['picture']['enlarged_picture']['url'] = URL_PRODUCTS_PICTURES.'/'.$enlarged_file_name;
				list($_RESULT['picture']['enlarged_picture']['width'], $_RESULT['picture']['enlarged_picture']['height']) = getimagesize(DIR_PRODUCTS_PICTURES.'/'.$enlarged_file_name);
			}else{
				$_RESULT['picture']['enlarged_picture'] = $_RESULT['picture']['large_picture'];
			}


			$_RESULT['productID'] = $this->getData('productID');
			if(isset($FilesPostVar['set_default'])&&intval($FilesPostVar['set_default'])==1){
				prdSetProductDefaultPicture( $this->getData('productID'), $_RESULT['picture']['photoID']);
			}
			if(file_exists($temp_file)){
				unlink($temp_file);
			}
			Functions::exec('file_remove', array($orig_file));

		}while(0);
		
		/* 
			add by developer@siteprof.net
			mod webAsystWatermark
		*/
			update_watermark_images ($this->getData('productID')); 
		/* 
			end add by developer@siteprof.net
			mod webAsystWatermark
		*/
		if($action_source == ACTCTRL_AJAX){
			if(PEAR::isError($error)){

				Message::raiseAjaxMessage(MSG_ERROR, 0, $error->getMessage());die;
			}
			die;
		}else{

			return $error;
		}
	}
published/SC/html/scripts/modules/products/scripts/product_detailed.php
После
		set_query('&sent=', '', true);
Добавить
		/* 
			add by developer@siteprof.net
			mod webAsystWatermark
		*/
		unset($a['enlarged']);
		foreach($all_product_pictures as $k=>$v)
		{
			unset($all_product_pictures[$k]['enlarged']);
		}
		/* 
			end add by developer@siteprof.net
			mod webAsystWatermark
		*/



 

Установка модуля завершена, теперь перейдите в Админ-панель -> Команда и настройте права доступа админитратора к модулю Watermark

Теперь нужно настроить модуль, зайдите в Админ-панель -> Магазин -> Дизайн -> Watermark

  • Аноним 09.12.2013 11:40
    Скажите наложение логотипа на фото грузит сервер или наложение происходит при загрузке фото тем самым не грузит?
    Ответ: (Администратор)

    Наложение логотипа происходит за один раз, когда вы в админке перезапускаете создание фотографий товаров (с логотипом). Тем самым нагрузка на сервер сокращается до минимума.
  • Аноним 14.06.2013 09:50
    1) можно ли сохранять пропорции фото при пересоздании, к примеру поставить ширину 300рх, а высота автоматом менялась пропорционально? Фото все разные, поэтому если поставить ширину и высоту, многие будут кривые.
    Ответ: (Администратор)

    Да, конечно.
  • Аноним 05.05.2013 21:31
    В нашем магазине фотки товаров уже есть. Что-бы пересоздать фотки с нашим логотипом нужно заново добавлять или обновлять фото товара на который будет наложен вотермарк? Или же ваш модуль вотермарка позволяет пересоздать все фотки уже существующих товаров с наложением логотипа? Задача состоит в том что-бы не делать нелепую работу по загрурузке/обновлению фоток товаров, а сразу применить модуль вотермарка, который создаст автоматом фотки с лого.
    СПс. Ждем ответа
    Ответ: (Администратор)

    В модуле предусмотрена функция пересоздания всех фотографий товаров. См. описание модуля, там этот пункт детально описан.
  • Аноним 05.05.2013 09:02
    Какое расширение фото-логотипа можно использовать как вотермарк? (gif, png, jpg...) Прозрачность водяного знака в модуле можно настроить или это можно сделать только средствами "правильного" png логотипа?
    Ответ: (Администратор)

    Формат файла маски только .png
    Прозрачность можно настроить в самом .png-файле
Всего  4  комментариев 1 ... ...1

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

Имя: Аноним
E-mail:
Рейтинг:
Сообщение:
Код проверки: captcha

Новые продукты


Кросспостинг в соц.сети


подробнее


SMM – продвижение сайта


подробнее


Интернет-магазин универсальный


подробнее


Копирайт, рерайт, написание статей


подробнее


Пакет продвижения Премиум


подробнее


Пакет продвижения Оптимальный


подробнее


Продвижение. Уровень 3


подробнее


Продвижение. Уровень 2


подробнее


Интернет-магазин АвтоДисков


подробнее


Интернет-магазин Автошин


подробнее

Товаров: 0, на сумму 0.00 $   Для бесплатной доставки по Москве осталось 5000 $  Для получения дисконтной карты осталось 2500 $

Наша команда не стоит на месте, мы постоянно разрабатываем новые продукты.

Если вы хотите быть в курсе наших новостей, подпишитесь на e-mail рассылку.




Google+
SiteProf.net отзывы: 10 из 10: 34 голосов. 76 комментариев