Jump to content

Add combinations from script


Recommended Posts

Is an external script. I'd like to use PS libraries.

 

I have the attribute ID and dynamically I have to create new values for this attribute and then set that the product is available in different attributes.

Share this post


Link to post
Share on other sites

it's not as easy as it seems, many thinks depends on external script, we don't know it

so its very very hard to say (especially for me, because i dont know anything about script)

Share this post


Link to post
Share on other sites
  • 8 months later...

Hello there

I agree Aegidius and want to type sometings more about the Prestashop classes as a software developer:

 

Current class is too much complicated and bad (I'll explain) for understand.

For example If you want create a php code (by using Prestashop native class and functions) to insert, update or import products with attributes, you have to 

  1. Check attribute group exists in DB (there is not a function search by name, you must create a great mysql query )
  2. If not exists you must create it add(); function of AttributeGroup class
  3. Check attribute exists in DB (there is not a function search by name too)
  4. If not exists you must create it by add(); function of Attribute class
  5. If you want to use this attribute in a product combination must use $product->addCombinationEntity() (there is no information about parameters and function)
  6. Get id from 5. step
  7. Assign the combination class with the id
  8. use $combination->setAttributes()
  9. use StockAvailable::setProductDependsOnStock() (There is not enough information about thşs function too)
  10. use StockAvailable::setProductOutOfStock() (There is not enough information about thşs function too)
  11. use StockAvailable::setQuantity();
  12. use AttributeGroup::cleanDeadCombinations();
  13. use Product::SetDefaultAttribute();
  14. use Product::save();
  15. ...
  16. ..

This is just for a product insert without product variables and functions.If you successfully type a code with this crazy methods and run the code, you will see not working as usually.

 

We need a documentation about this class at least more comment lines at codes

  • Like 4

Share this post


Link to post
Share on other sites
  • 7 months later...

Hello there

I agree Aegidius and want to type sometings more about the Prestashop classes as a software developer:

 

Current class is too much complicated and bad (I'll explain) for understand.

For example If you want create a php code (by using Prestashop native class and functions) to insert, update or import products with attributes, you have to 

  1. Check attribute group exists in DB (there is not a function search by name, you must create a great mysql query )
  2. If not exists you must create it add(); function of AttributeGroup class
  3. Check attribute exists in DB (there is not a function search by name too)
  4. If not exists you must create it by add(); function of Attribute class
  5. If you want to use this attribute in a product combination must use $product->addCombinationEntity() (there is no information about parameters and function)
  6. Get id from 5. step
  7. Assign the combination class with the id
  8. use $combination->setAttributes()
  9. use StockAvailable::setProductDependsOnStock() (There is not enough information about thşs function too)
  10. use StockAvailable::setProductOutOfStock() (There is not enough information about thşs function too)
  11. use StockAvailable::setQuantity();
  12. use AttributeGroup::cleanDeadCombinations();
  13. use Product::SetDefaultAttribute();
  14. use Product::save();
  15. ...
  16. ..

This is just for a product insert without product variables and functions.If you successfully type a code with this crazy methods and run the code, you will see not working as usually.

 

We need a documentation about this class at least more comment lines at codes

I have this problem i create a module that import products from amazon to prestasho with all atributes and i can use only classe product-> add, only because the another classes are so complex.

Share this post


Link to post
Share on other sites
  • 1 year later...

Hy there. I managed to do a script that creates combinations for my products, with attributes and stuff. It goes like this:

function combination($id_product, $arr, $lang_id){
	$id_product_attribute = Combination::getIdByReference($id_product, $arr['code']);
	$comb = new Combination($id_product_attribute);
	if($id_product_attribute){
		StockAvailable::setQuantity($id_product, $id_product_attribute, $arr['quantity']);
	} else {

		$id_atribute = array();
		if($arr['size_group_id']){
			$id_attribute_size = attribute_id($arr['size_group_id'], $arr['sizes'], $lang_id);
			$id_attribute[] = $id_attribute_size;
		}
		if($arr['color_group_id']){
			$id_attribute_color = attribute_id($arr['color_group_id'], $arr['color'], $lang_id);
			$id_attribute[] = $id_attribute_color;
		}
		if(count($id_attribute)){
			$comb->quantity = $arr['quantity'];
			$comb->id_product = $id_product;
			$comb->reference = $arr['code'];
			$comb->add();
			$comb->setAttributes($id_attribute);
		}
		if (isset($arr['supplyer']) && $arr['supplyer'] == 'Supplyer') {
			
			$id_product_attribute = Combination::getIdByReference($id_product, $arr['code']);
			$comb = new Combination($id_product_attribute);
			
			if ($arr['combination_image'] != '') {
					$combination_image = $arr['combination_image'][0];
					product_img($id_product, $combination_image);
			}

			if($id_product_attribute){
				StockAvailable::setQuantity($id_product, $id_product_attribute, $arr['quantity']);
				
				$comb->default_on = 1;
				$comb->update();
			}
		}
	}
}

The lang_id can be set like this:

$defaultLanguage = new Language((int)(Configuration::get('PS_LANG_DEFAULT')));
$languages = Language::getLanguages();
$lang_id = $defaultLanguage->id;

Hope this helps.

  • Like 3

Share this post


Link to post
Share on other sites
  • 8 months later...

Hello, my solution is a following: 

 

1. You need the 'id_attribute' from the 'attribute_lang' table

 

After: 

 

       $product = new Product( $product->id );
            $combinationAttributes = array();
            $combinationAttributes[] = 9;   //id_attribute
            $idProductAttribute = $product->addProductAttribute(
                (float)0, //price 
                (float)0, //weight
                0,        //unit_impact
                null ,    //ecotax
                (int)0,   //quantity
                "",       //id_images
                "" , //reference
                strval(""), //suppliers
                strval(""), //ean13
                NULL, //default 
                NULL,  //location
                NULL  //upc
                );
                $product->addAttributeCombinaison($idProductAttribute,                     $combinationAttributes);     

Share this post


Link to post
Share on other sites
  • 2 months later...
  • 2 weeks later...

I But the function 

 

$id_attribute_color = attribute_id($arr['color_group_id'], $arr['color'], $lang_id);

 

where is?

 

Thank You

 

 

The function is a Prestashop function. To use PS functions, you call like this:

include_once 'config/config.inc.php';
include(dirname(__FILE__).'/init.php');

Share this post


Link to post
Share on other sites
  • 5 months later...
On 18/9/2017 at 10:04 AM, tony_mik said:

 

 

The function is a Prestashop function. To use PS functions, you call like this:


include_once 'config/config.inc.php';
include(dirname(__FILE__).'/init.php');

I get error on this, telling function not defined.

I tried to search in the entire prestashop code but didn't found a reference to that function.

Someone can help me?

Share this post


Link to post
Share on other sites
  • 2 years later...

Hi, I use this in Prestashop 1.7.X in the header of the file to access all functions

    require_once(dirname(__FILE__) . '/../../../config/config.inc.php');

    require_once(dirname(__FILE__) . '/../../../init.php');

Share this post


Link to post
Share on other sites
  • 2 months later...

Hi, if u want import all functions use only:

 

require_once(dirname(__FILE__) . '/../../../config/config.inc.php'); <- have all functions

 

If u have doubts about the folder location use that in header file :

    ini_set('display_errors', 1);

    ini_set('display_startup_errors', 1);

    error_reporting(E_ALL);

 

Then PHP can show you errors or warnings.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More