-
Posts
1,126 -
Joined
-
Last visited
-
Days Won
92
Content Type
Profiles
Forums
Gallery
Downloads
Articles
Store
Blogs
Everything posted by the.rampage.rado
-
Many shop issues after new try to upgrade
the.rampage.rado replied to Scully's question in Technical help
First of all. Did you try gradually updating between official major versions and keeping their requirements in check (like dependencies, php version, extensions, etc.)? I would recommend to try this 1.0.8->1.1.0->1.2.0->1.3.0->1.4.0->1.5.0->1.6.0. This would take more time but you will be able to investigate step by step where things break, where you have to check your hosting configuration, etc. 1.0.8->1.6 is quite a big leap, quite a lot things changed for these years, and on top of that when you have some custom work done to the code which could have messed up the database it's get messy quite fast. Also I would recommend on each step to consult with the release notes for every version so you can expect some things that are changed. You can find those here: https://forum.thirtybees.com/forum/2-announcements-about-thirty-bees/ Install Collect logs module when it's visible for you in the modules catalog (I don't know if it supports 1.0.8) and check what is recorded there. Make a test FO registration, make an order, send an email, cancel an order. If everything is OK and there are no records in Collect logs module proceed to the next version of thirty bees. On each step update the files through Core Updated but don't forget to check if there are table updates too - do those or your system will not work as expected. Now, on to your topics: 1. Did you install a mail transport module when under thirtybees 1.6? This functionality was moved to a module so different methods can be used (the one in PS and thirty bees up until now was unmaintained and obstructed further development of the system). After you install your module and configure it you should also select it for use in Advanced Preferences->Email: 2. If you have migrated your old table to a fresh 1.6 install the order state ids might be different. This is not thirty bees fault, it introduces some default states but this configuration might be modified by each shop and this approach is not recommended when updating. If you use Core Updater this will not be the case. 3. Here is the same - most probably a conflict between your old table records and your new install order state ids. When I cancel an order the stock levels are returned to the previous value. 4. Share your carrier settings, check your zones and your carrier coverage for them. More information would be needed to troubleshoot this. -
Datakick module how to manage images duplication? (huge img/p dir)
the.rampage.rado replied to Beeta's topic in Modules
Tidy module I recommended has cronjobs for clearing image so if you're so dependent on your current setup you can try it. It should clear all 'unlinked' images. -
CSS/JS minification in 1.5.0 / bleeding edge
the.rampage.rado replied to datakick's topic in English
Same here. In theory nothing more should be done, but yes, my source is also not minified and it looks 'human-readable'. But I'm pretty sure this was the case before the extraction. EDIT: You have to have your module active and then in Performance have those settings as follows: -
If you already have a theme that you like I would advise to contact datakick and he might have some free time in order to help you out with any bugs that you have. The main issue is always within theme's block cart overrides - which leads to 500. The rest is most probably warnings and deprecations. I'm with Warehouse 3.8.7 (the latest version for PS1.6) and it had some issues, cart one too - but now I'm rocking it on php 8.1 with few warnings and it's making me money. Same - I would like to contact datakick soon in order to work on those issues so I can move to 8.2 and later 8.3 (if nothing big pops up).
-
Datakick module how to manage images duplication? (huge img/p dir)
the.rampage.rado replied to Beeta's topic in Modules
I don't know about your importing setup but if you are reusing the products (importing so to update prices, etc) why you simply don't skip the image import on the consecutive tries? Regarding Tidy - yes, I too was concerned about this after the image rewrite but it's is working as expected - it detects the unlinked images and offers them for deletion: Delete unused image files (preview) Unused images found and deleted: 9947 /domain.com/img/p/9/8/3/6/9836-cart_default2x.webp - unused /domain.com/img/p/9/8/3/6/9836-backoffice_product_medium2x.webp - unused /domain.com/img/p/9/8/3/6/9836-medium_default2x.webp - unused /domain.com/img/p/9/8/3/6/9836-large_default2x.webp - unused /domain.com/img/p/9/8/3/6/9836-home_default2x.webp - unused /domain.com/img/p/9/8/3/6/9836-small_default2x.webp - unused /domain.com/img/p/9/8/3/0/9830-large_default2x.webp - unused /domain.com/img/p/9/8/3/0/9830-small_default2x.webp - unused /domain.com/img/p/9/8/3/0/9830-home_default2x.webp - unused /domain.com/img/p/9/8/3/0/9830-medium_default2x.webp - unused /domain.com/img/p/9/8/3/0/9830-backoffice_product_medium2x.webp - unused /domain.com/img/p/9/8/3/0/9830-cart_default2x.webp - unused /domain.com/img/p/9/8/3/3/9833-large_default2x.webp - unused /domain.com/img/p/9/8/3/3/9833-backoffice_product_medium2x.webp - unused -
Datakick module how to manage images duplication? (huge img/p dir)
the.rampage.rado replied to Beeta's topic in Modules
If your newly imported products have new ID (and they should have) they created new image. Thirty bees does not care if it is 1:1 with another image on the filesystem (and it should not care). The issue comes from that when old products are deleted their images stay on the filesystem. Which should not be the case. I can recommend Tidy module to cope with those unlinked old images (it wont clean 'duplicates' but it will clean old unneeded images): https://codecanyon.net/item/prestashop-tidy/18965736 It can also do many more things. JUST always do backups. -
How many Opencart or Woocommerce themes are compatible with this? Oh... none?
-
Large ammount of Cache space after migration to Panda theme
the.rampage.rado replied to Derbai's question in Theme help
No, full page cache is not fixed on 1.6 but there are those two new functions to keep your site cleaner. -
After Fresh Install of TB 1.6 State Field is missing on adresses
the.rampage.rado replied to Scully's question in Technical help
Regarding this can you confirm if this list is complete and contains all the 'states' in Switzerland and I'll be able to make a PR so datakick can include it in the localization pack and you would be able to import them from Localization -> Import a localization pack ? <states> <state name="Aargau (de)" iso_code="CH-AG" country="CH" zone="Europe" tax_behavior="0" /> <state name="Appenzell Ausserrhoden (de)" iso_code="CH-AR" country="CH" zone="Europe" tax_behavior="0" /> <state name="Appenzell Innerrhoden (de)" iso_code="CH-AI" country="CH" zone="Europe" tax_behavior="0" /> <state name="Basel-Landschaft (de)" iso_code="CH-BL" country="CH" zone="Europe" tax_behavior="0" /> <state name="Basel-Stadt (de)" iso_code="CH-BS" country="CH" zone="Europe" tax_behavior="0" /> <state name="Bern (de), Berne (fr)" iso_code="CH-BE" country="CH" zone="Europe" tax_behavior="0" /> <state name="Fribourg (fr), Freiburg (de)" iso_code="CH-FR" country="CH" zone="Europe" tax_behavior="0" /> <state name="Genève (fr)" iso_code="CH-GE" country="CH" zone="Europe" tax_behavior="0" /> <state name="Glarus (de)" iso_code="CH-GL" country="CH" zone="Europe" tax_behavior="0" /> <state name="Graubünden (de)" iso_code="CH-GR" country="CH" zone="Europe" tax_behavior="0" /> <state name="Jura (fr)" iso_code="CH-JU" country="CH" zone="Europe" tax_behavior="0" /> <state name="Luzern (de)" iso_code="CH-LU" country="CH" zone="Europe" tax_behavior="0" /> <state name="Neuchâtel (fr)" iso_code="CH-NE" country="CH" zone="Europe" tax_behavior="0" /> <state name="Nidwalden (de)" iso_code="CH-NW" country="CH" zone="Europe" tax_behavior="0" /> <state name="Obwalden (de)" iso_code="CH-OW" country="CH" zone="Europe" tax_behavior="0" /> <state name="Sankt Gallen (de)" iso_code="CH-SG" country="CH" zone="Europe" tax_behavior="0" /> <state name="Schaffhausen (de)" iso_code="CH-SH" country="CH" zone="Europe" tax_behavior="0" /> <state name="Schwyz (de)" iso_code="CH-SZ" country="CH" zone="Europe" tax_behavior="0" /> <state name="Solothurn (de)" iso_code="CH-SO" country="CH" zone="Europe" tax_behavior="0" /> <state name="Thurgau (de)" iso_code="CH-TG" country="CH" zone="Europe" tax_behavior="0" /> <state name="Ticino (it)" iso_code="CH-TI" country="CH" zone="Europe" tax_behavior="0" /> <state name="Uri (de)" iso_code="CH-UR" country="CH" zone="Europe" tax_behavior="0" /> <state name="Valais (fr), Wallis (de)" iso_code="CH-VS" country="CH" zone="Europe" tax_behavior="0" /> <state name="Vaud (fr)" iso_code="CH-VD" country="CH" zone="Europe" tax_behavior="0" /> <state name="Zug (de)" iso_code="CH-ZG" country="CH" zone="Europe" tax_behavior="0" /> <state name="Zürich (de)" iso_code="CH-ZH" country="CH" zone="Europe" tax_behavior="0" /> </states> Regarding the default country you can set this here Localization->Localization: While at this issue we can fix the tax rates too: (current rates in thirty bees) <taxes> <tax id="1" name="TVA CH 8.0%" rate="8.0"/> <tax id="2" name="TVA CH 3.8%" rate="3.8"/> <tax id="3" name="TVA CH 2.5%" rate="2.5"/> <taxRulesGroup name="CH Standard Rate (8.0%)"> <taxRule iso_code_country="ch" id_tax="1"/> </taxRulesGroup> <taxRulesGroup name="CH Reduced Rate (3.8%)"> <taxRule iso_code_country="ch" id_tax="2"/> </taxRulesGroup> <taxRulesGroup name="CH Super Reduced Rate (2.5%)"> <taxRule iso_code_country="ch" id_tax="3"/> </taxRulesGroup> </taxes> I see the following information currently online, if you can confirm this is true: -
Large ammount of Cache space after migration to Panda theme
the.rampage.rado replied to Derbai's question in Theme help
1.6 is the latest official version which offers the latest bugfixes, security fixes and new features. Running versions prior to the latest on ecommerce sites is like running windows 7 or XP in 2025 - 'it's working' but leaves a bad taste in your mouth. If 1.6 is not 'stable' for somebody they should consider hunting bugs in their theme and 3rd party modules as the system has never been more stable. -
Revws module - some email links for customers give 0 stars
the.rampage.rado replied to 30knees's question in Module help
Page can not be found. -
Large ammount of Cache space after migration to Panda theme
the.rampage.rado replied to Derbai's question in Theme help
DON'T use Full page cache as it is 'broken'. Use the following settings for caching and no hassle: You say the large amount of files are in your cache folder, you mean root/cache or root/themes/cache? If it is in your theme cache folder you can manually go in and delete everything that is older than 2 months. If you are not using thirty bees 1.6 or later the system did not clear those files automatically. As you can see in my instance there are two new settings for logs and js and css files retention. When you set those up thirty bees will delete files older than this period. -
Fails to download images after update to 1.6
the.rampage.rado replied to Marta's question in Updating thirty bees
I assume you are able to access the remote images in your browser? -
Fails to download images after update to 1.6
the.rampage.rado replied to Marta's question in Updating thirty bees
Please, check if your AdminImportController has the following fix: https://github.com/thirtybees/thirtybees/commit/a15ff326ca0917f14e741818a1d7bc006de13dd5 It should be there as it should be part of thirty bees 1.6 but... -
This should not happen (wrong permisions), each product in separate folder is proper behavior. Contact your host if you are on managed service - they will probably be able to troubleshoot.
- 2 replies
-
- file permissions
- img
-
(and 1 more)
Tagged with:
-
Probably you installed a version that is not 'native' to your server PHP version. Go ahead and update those. Also check your db structure (the button on top right) - if changes are present there - apply those too.
-
-
Warning about updating to latest bleeding edge as of 2024-01-09
the.rampage.rado replied to 30knees's topic in English
I was not going to respond to this thread, but 'what automatic updates on thirtybees'?! 😄 😄 😄 Regarding the 'pseudo-security updates' - sooner or later you will have 'an outage beyond the unpublished golden limits' but it's up to you. Nobody can force you to update the shop. -
For me the main idea behind multistore is sharing products (that can be manipulated per store context - name, keywords, descriptions, even images) and sharing their quantities, simplifying stock movement, etc. Yes, you probably will have to adjust and optimize the product per store, but then you have to work with it's quantities, combinations, etc at only one place. Same for order processing, etc.
-
It is possible to have two exactly the same sites with exactly the same content but it will 100% hurt your rankings. Google will take your more reputable site and slash the other. I'm currently experiencing exactly the same - I have 6 sites in my multistore that share 50% of the products and 50% are unique. One is very old and reputable (ranks with multiple pages in first page), one is 2 years old and have every page indexed and showing in google (not first page for all the words, probably 10% of them), the rest were made last year. Despite I have unique products with them, not only the shared categories that apply for all shops, the last four shops experience this: So in your case - if you have control over .com I would simply redirect at server level those backlinks with 301 to .ca domain/product/category or even better if possible do a reverse and move your shop back to .com and do the redirect thing for the .ca domain (hopefully the domain authority for com has not dropped since).
-
Upgrading from 1.4.0 causing unable to login to admin backend
the.rampage.rado replied to ukclearance's question in Updating thirty bees
For the login issue try this: And after you regenerate your pass delete this file as anybody would be able to enter your admin when it's present on the server. -
Changing Stripe module Stripe logo with Credit Card logo
the.rampage.rado replied to 30knees's topic in Stripe
IMHO it would be better to leave Stripe and simply add some cards under it. Stripe and PayPal adds trust to your store so it should be nice to show that you process those payments with them at this step. -
Changing Stripe module Stripe logo with Credit Card logo
the.rampage.rado replied to 30knees's topic in Stripe
I put my money on that inside stripe's module there is a image folder where you can swap this with something sized and optimized for this place. 🙂 In this case it's /views/img/stripebtnlogo.png But keep in mind that this will be overwritten on every update. -
Help with importing combinations
the.rampage.rado replied to the.rampage.rado's question in Technical help
@datakick, I think chatgpt made a working code for me but can you confirm there is something wrong in this mechanism or it's just a bug with my csv file (let's say using Cyrillic and making the encoded ajax call very big for this operation with so many lines, etc). During debuggint it advised the following is not working: Key Changes: Handling of crossStepsVariables: It now checks if crossStepsVars exists in the AJAX request and decodes it correctly. If crossStepsVars is missing or invalid, it initializes crossStepsVariables with empty arrays for groups, attributes, and deletedProducts. Extensive Logging: Logs the raw and decoded crossStepsVars at the start. Logs the final crossStepsVariables after the import step. Fallback for Missing Data: Ensures that crossStepsVariables is never empty or invalid, preventing errors in subsequent processing. Improved Structure: Cleaned up logic for handling results and reserved additional POST size for large imports. (of course I removed the logging from the following functions after debugging) Working versions for me that import the large file: public function attributeImport($offset = false, $limit = false, &$crossStepsVariables = false, $validateOnly = false) { $defaultLanguage = Configuration::get('PS_LANG_DEFAULT'); // Initialize groups $groups = is_array($crossStepsVariables) && array_key_exists('groups', $crossStepsVariables) ? $crossStepsVariables['groups'] : []; foreach (AttributeGroup::getAttributesGroups($defaultLanguage) as $group) { $groups[$group['name']] = (int) $group['id_attribute_group']; } // Initialize attributes $attributes = is_array($crossStepsVariables) && array_key_exists('attributes', $crossStepsVariables) ? $crossStepsVariables['attributes'] : []; foreach (ProductAttribute::getAttributes($defaultLanguage) as $attribute) { $attributes[$attribute['attribute_group'].'_'.$attribute['name']] = (int) $attribute['id_attribute']; } // Initialize deleted products $deletedProducts = is_array($crossStepsVariables) && array_key_exists('deletedProducts', $crossStepsVariables) ? $crossStepsVariables['deletedProducts'] : []; $this->receiveTab(); $datasource = $this->openDataSource($offset); static::setLocale(); $regenerate = Tools::getValue('regenerate'); $shopIsFeatureActive = Shop::isFeatureActive(); $lineCount = 0; for ($currentLine = 0; ($line = $datasource->getRow()) && (!$limit || $currentLine < $limit); $currentLine++) { $lineCount++; if (empty($line) || !is_array($line) || count(array_filter($line)) == 0) { $this->warnings[] = $this->l('There is an empty row in the file that won\'t be imported.'); continue; } $info = static::getMaskedRow($line); $info = array_map('trim', $info); try { $this->attributeImportOne( $info, $defaultLanguage, $groups, // by ref $attributes, // by ref $regenerate, $shopIsFeatureActive, $validateOnly, $deletedProducts // by ref ); } catch (PrestaShopException $e) { $this->errors[] = $e->getMessage(); } } $datasource->close(); if ($crossStepsVariables !== false) { $crossStepsVariables['groups'] = is_array($groups) ? $groups : []; $crossStepsVariables['attributes'] = is_array($attributes) ? $attributes : []; $crossStepsVariables['deletedProducts'] = is_array($deletedProducts) ? $deletedProducts : []; } return $lineCount; } public function importByGroups($offset = false, $limit = false, &$results = null, $validateOnly = false, $moreStep = 0) { // Check if the CSV file exists if (Tools::getValue('filename')) { $entityType = $this->getSelectedEntity(); $shopIsFeatureActive = Shop::isFeatureActive(); // If I am a superadmin, truncate table (ONLY IF OFFSET == 0 or false and NOT FOR VALIDATION MODE!) if (!$offset && !$moreStep && !$validateOnly && (($shopIsFeatureActive && $this->context->employee->isSuperAdmin()) || !$shopIsFeatureActive) && Tools::getValue('truncate')) { $this->truncateTables($entityType); } $doneCount = 0; $crossStepsVariables = []; // Get crossStepsVariables from the previous AJAX call if ($crossStepsVars = Tools::getValue('crossStepsVars')) { $crossStepsVars = json_decode($crossStepsVars, true); if (!empty($crossStepsVars) && is_array($crossStepsVars)) { $crossStepsVariables = $crossStepsVars; } else { $crossStepsVariables = ['groups' => [], 'attributes' => [], 'deletedProducts' => []]; } } else { $crossStepsVariables = ['groups' => [], 'attributes' => [], 'deletedProducts' => []]; } // Process based on entity type if (static::hasEntityType($entityType)) { $doneCount += $this->importGroup(static::getEntityType($entityType), $offset, $limit, $crossStepsVariables, $validateOnly, $moreStep); } else { // Fallback to original implementation switch ($entityType) { case static::ENTITY_TYPE_CATEGORIES: $doneCount += $this->categoryImport($offset, $limit, $crossStepsVariables, $validateOnly); $this->clearSmartyCache(); break; case static::ENTITY_TYPE_PRODUCTS: if (!defined('PS_MASS_PRODUCT_CREATION')) { define('PS_MASS_PRODUCT_CREATION', true); } $moreStepLabels = [$this->l('Linking Accessories...')]; $doneCount += $this->productImport($offset, $limit, $crossStepsVariables, $validateOnly, $moreStep); $this->clearSmartyCache(); break; case static::ENTITY_TYPE_COMBINATIONS: $doneCount += $this->attributeImport($offset, $limit, $crossStepsVariables, $validateOnly); $this->clearSmartyCache(); break; // Add other cases if needed case static::ENTITY_TYPE_CUSTOMERS: $doneCount += $this->customerImport($offset, $limit, $validateOnly); break; case static::ENTITY_TYPE_ADDRESSES: $doneCount += $this->addressImport($offset, $limit, $validateOnly); break; case static::ENTITY_TYPE_MANUFACTURERS: $doneCount += $this->manufacturerImport($offset, $limit, $validateOnly); $this->clearSmartyCache(); break; case static::ENTITY_TYPE_SUPPLIERS: $doneCount += $this->supplierImport($offset, $limit, $validateOnly); $this->clearSmartyCache(); break; case static::ENTITY_TYPE_ALIAS: $doneCount += $this->aliasImport($offset, $limit, $validateOnly); break; case static::ENTITY_TYPE_STORE_CONTACTS: $doneCount += $this->storeContactImport($offset, $limit, $validateOnly); $this->clearSmartyCache(); break; case static::ENTITY_TYPE_SUPPLY_ORDERS: $doneCount += $this->supplyOrdersImport($offset, $limit, $validateOnly); break; case static::ENTITY_TYPE_SUPPLY_ORDER_DETAILS: $doneCount += $this->supplyOrdersDetailsImport($offset, $limit, $crossStepsVariables, $validateOnly); break; } } // Handle results and progress if ($results !== null) { $results['isFinished'] = ($doneCount < $limit); $results['doneCount'] = $offset + $doneCount; if ($offset === 0) { // Compute total count only once $datasource = $this->openDataSource(0); $results['totalCount'] = $datasource->getNumberOfRows() - Tools::getIntValue('skip'); $datasource->close(); } if (!isset($moreStepLabels)) { $moreStepLabels = []; } if (!$results['isFinished'] || (!$validateOnly && ($moreStep < count($moreStepLabels)))) { $nextPostSize = mb_strlen(json_encode($crossStepsVariables)); $results['crossStepsVariables'] = $crossStepsVariables; $results['nextPostSize'] = $nextPostSize + (1024 * 64); // Reserve additional size $results['postSizeLimit'] = Tools::getMaxUploadSize(); } if ($results['isFinished'] && !$validateOnly && ($moreStep < count($moreStepLabels))) { $results['oneMoreStep'] = $moreStep + 1; $results['moreStepLabel'] = $moreStepLabels[$moreStep]; } } // Final log for current step $logMessage = sprintf($this->l('%s import'), $entityType); if ($offset !== false && $limit !== false) { $logMessage .= ' ' . sprintf($this->l('(from %s to %s)'), $offset, $limit); } if (Tools::getValue('truncate')) { $logMessage .= ' ' . $this->l('with truncate'); } Logger::addLog($logMessage, 1, null, $entityType, null, true, (int) $this->context->employee->id); } else { $this->errors[] = $this->l('To proceed, please upload a file first.'); } } -
Help with importing combinations
the.rampage.rado replied to the.rampage.rado's question in Technical help
Quotes don't help - the values get imported with them in the store (when the import succeeds). I managed to import few combinations but only if the file is very small (under 20 rows or so). I see that large files are split in multiple parts that are imported by ajax but I can't figure out what is breaking. So I looked at my file and found a row where a product had only color but not size associated with it (no stock is available). An easy fix - python script will exclude those and give me a list to remove them from my store. But then when I try to import the file without those unproperly formatted lines I get this error: And once again - if I make the file very small (~20 lines) it imports, but if I have 2k lines - this error appears...