Re-creating thumbnails of images in product attributes

Phoca Cart - complex e-commerce extension
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re-creating thumbnails of images in product attributes

Post by zucha.imz »

Hi,

I found another problem, or feature needing.
I have a products, and every product has a aprox. 20 attributes of color.
Every attribute color has a two images - small and full image. I select a image, and phoca cart create a thumbnail from full image. But a change a thumbs size and I need recreate attribute image thumbnails.

Function in product list "Recreate thumbs", recreate only main image of product, no images from attributes.
Only solutions what I found is, delete all thumbs and manualy go attribute by attribute and procduct by product and open select image dialog and select image. After that phocacart create new thumb of image. But this si pain about 100 products and every has 20 attributes with image.

Thx for help.

Tags:
User avatar
Jan
Phoca Hero
Phoca Hero
Posts: 47810
Joined: 10 Nov 2007, 18:23
Location: Czech Republic
Contact:

Re: Re-creating thumbnails of images in product attributes

Post by Jan »

Hi, yes, unfortunately, there is no function to recreate attribute thumbnails. Added into feature request list.

https://github.com/PhocaCz/PhocaCart/issues/143

Jan
If you find Phoca extensions useful, please support the project
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re: Re-creating thumbnails of images in product attributes

Post by zucha.imz »

Hi, any chance to add this feature in few days or weeks ?

Thanks
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re: Re-creating thumbnails of images in product attributes

Post by zucha.imz »

Or can I run recreating manualy by some php scirpt ?
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re: Re-creating thumbnails of images in product attributes

Post by zucha.imz »

OK, fast hack is create a unpublished item and add additional images to them. (These images ar images of atributes, uses in other items with no recreated thumbnail). After that simply click recreate thumbnail for this one new created item.... and thmubnails are generated.
User avatar
Jan
Phoca Hero
Phoca Hero
Posts: 47810
Joined: 10 Nov 2007, 18:23
Location: Czech Republic
Contact:

Re: Re-creating thumbnails of images in product attributes

Post by Jan »

BTW:
"Or can I run recreating manualy by some php scirpt ?"

https://www.phoca.cz/phocacart-extensio ... ole-plugin

You can recreate images per CLI, e.g. with command:

php phocacart:categories:recreatethumbnails

Jan
If you find Phoca extensions useful, please support the project
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re: Re-creating thumbnails of images in product attributes

Post by zucha.imz »

Thanks, that is awesome :)
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re: Re-creating thumbnails of images in product attributes

Post by zucha.imz »

Hi Jan,

I edited a CLI and now I can generate thumbs for main image, for additional image and added generate thumbs for attribute image

code of edited function doExecute in file plugins/console/phocacart/src/Command/Product/RecreateThumbnails.php

maybe usefull for somebody, or you can add to your console plugin for everyone ...

Code: Select all

<?php

	protected function doExecute(InputInterface $input, OutputInterface $output): int
	{
		$this->loadComponent();
		$this->configureIO($input, $output);
		$db = $this->getDatabase();
		$warnings = [];
		$successCount = 0;
		$itemsCount = 0;

		$query = $db->getQuery(true)
			->select($db->quoteName('p.id'))
			->select($db->quoteName('p.image'))
			->from($db->quoteName('#__phocacart_products') . ' as ' . $db->quoteName('p'))
			->where($db->quoteName('p.image') . ' <> ' . $db->quote(''));

		if ($ids = $input->getOption('id')) {
			$ids = explode(',', $ids);
			$ids = ArrayHelper::toInteger($ids);
			if ($ids)
				$query->where($db->quoteName('p.id') . ' in (' . implode(', ', $ids) . ')');
		}

		if ($categories = $input->getOption('cat')) {
			$categories = explode(',', $categories);
			$categories = ArrayHelper::toInteger($categories);
			if ($categories) {
				$query->join('INNER', $db->quoteName('#__phocacart_product_categories') . ' as ' . $db->quoteName('c'), $db->quoteName('c.product_id') . ' = ' . $db->quoteName('p.id'));
				$query->where($db->quoteName('c.category_id') . ' in (' . implode(', ', $categories) . ')');
			}
		}

		$db->setQuery($query);
		$items = $db->loadObjectList();
		$itemsCount += count($items);
		if ($items) {
			$this->ioStyle->info('Recreating main image thumbnails');
			$this->recreateThumbnails($items, 'productimage', $warnings, $successCount);
		}

		$query = $db->getQuery(true)
			->select($db->quoteName('p.product_id') . ' as ' . $db->quoteName('id'))
			->select($db->quoteName('p.image'))
			->from($db->quoteName('#__phocacart_product_images') . ' as ' . $db->quoteName('p'));

		if ($ids)
			$query->where($db->quoteName('p.product_id') . ' in (' . implode(', ', $ids) . ')');

		if ($categories) {
			$query->join('INNER', $db->quoteName('#__phocacart_product_categories') . ' as ' . $db->quoteName('c'), $db->quoteName('c.product_id') . ' = ' . $db->quoteName('p.product_id'));
			$query->where($db->quoteName('c.category_id') . ' in (' . implode(', ', $categories) . ')');
		}

		$db->setQuery($query);
		$items = $db->loadObjectList();
		$itemsCount += count($items);
		if ($items) {
			$this->ioStyle->info('Recreating additional image thumbnails');
			$this->recreateThumbnails($items, 'productimage', $warnings, $successCount);
		}


		// Recreating thumbs for attribute images
		$query = $db->getQuery(true)
			->select($db->quoteName('p.id'))
			->select($db->quoteName('p.image'))
			->from($db->quoteName('#__phocacart_attribute_values') . ' as ' . $db->quoteName('p'));

			$query->join('INNER', $db->quoteName('#__phocacart_attributes') . ' as ' . $db->quoteName('a'), $db->quoteName('a.id') . ' = ' . $db->quoteName('p.attribute_id'));


			if ($ids) 
				$query->where($db->quoteName('a.product_id') . ' in (' . implode(', ', $ids) . ')');



			if ($categories) {
				$query->join('INNER', $db->quoteName('#__phocacart_product_categories') . ' as ' . $db->quoteName('c'), $db->quoteName('c.product_id') . ' = ' . $db->quoteName('a.product_id'));
				$query->where($db->quoteName('c.category_id') . ' in (' . implode(', ', $categories) . ')');
			}
		
		$db->setQuery($query);
		$items = $db->loadObjectList();
		$itemsCount += count($items);
		if ($items) {
			$this->ioStyle->info('Recreating atribute image thumbnails');
			$this->recreateThumbnails($items, 'productimage', $warnings, $successCount);
		}



		if ($itemsCount == 0) {
			$this->ioStyle->info('Nothing to update');
			return self::RETURN_CODE_SUCCESSFUL;
		}

		if ($warnings) {
			$this->ioStyle->warning('Following errors occured');
			$this->ioStyle->listing($warnings);
		}

		if ($successCount) {
			$this->ioStyle->success($successCount . ' thumbnails recreated successfully');

			if ($warnings)
				return self::RETURN_CODE_PARTIALLY_SUCCESSFUL;
			else
				return self::RETURN_CODE_SUCCESSFUL;
		}

		return self::RETURN_CODE_FAILED;
	}
}
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re: Re-creating thumbnails of images in product attributes

Post by zucha.imz »

But I like generate a thumbs of attribute image by button, (or by calling some scritp ) for my customer (he does not access to CLI ). Is there any fast way, to code this ? Where I can found (whitch file? ) a code for button Recreate thumbnails in administration menu in product section ? Little kick maybe help me :)

Thx
zucha.imz
Phoca Member
Phoca Member
Posts: 34
Joined: 03 Aug 2018, 13:53

Re: Re-creating thumbnails of images in product attributes

Post by zucha.imz »

ok, who seeks will find :)

I add function to recreate thumbnails button and now recreate main image, additional image and also attribute image


in file /administrator/components/com_phocacart/models/phocacartitem.php

at line number 1169 insert this code to generate thumbs also from attribute images

Code: Select all

if (isset($v->id) && (int)$v->id > 0) {
							$query = 'SELECT p.image, p.id'.
									' FROM #__phocacart_attribute_values AS p' .
									' INNER JOIN #__phocacart_attributes as a ON a.id = p.attribute_id' .
									' WHERE a.product_id ='.(int)$v->id;
							$this->_db->setQuery($query);
							$files3 = $this->_db->loadObjectList();
							if (isset($files3) && count($files3)) {
								foreach($files3 as $k3 => $v3) {

									$original3	= PhocacartFile::existsFileOriginal($v3->image, 'productimage');
									if (!$original3) {
										// Original does not exist - cannot generate new thumbnail
										//$message = JText::_('COM_PHOCACART_FILEORIGINAL_NOT_EXISTS');
										//return false;
										continue;
									}

									// Delete old thumbnails
									$deleteThubms3 = PhocacartFileThumbnail::deleteFileThumbnail($v3->image, 1, 1, 1, 'productimage');
									if (!$deleteThubms3) {
										//$message = JText::_('COM_PHOCACART_ERROR_DELETE_THUMBNAIL');
										//return false;
										continue;
									}
									$createThubms3 = PhocacartFileThumbnail::getOrCreateThumbnail($v3->image, 0, 1,1,1,0,'productimage');
									if (!$createThubms3) {
										//$message = JText::_('COM_PHOCACART_ERROR_WHILECREATINGTHUMB');
										//return false;
										continue;
									}

								}
							}
						}
Post Reply