Jump to content
thirty bees forum

Leaderboard

Popular Content

Showing content with the highest reputation since 10/09/2024 in all areas

  1. Today, we are thrilled to introduce the latest version of Thirty Bees: Version 1.6. This update wouldn’t have been possible without the support of our dedicated members. Thank you for being part of our journey! And to those who contributed code—your work is invaluable, and we extend our heartfelt thanks. If you’re not yet a member, consider joining us. Your support, whether through a small donation or by becoming a monthly member, makes a real difference. For just $15 a month with our Silver Membership, you gain access to an array of powerful modules designed to save you time and streamline your workflow. What’s New in Version 1.6? This release introduces numerous core updates and security improvements, some of which are highlighted below: ImageRewrite with AVIF Support: You can now use the AVIF format for images, optimizing quality and load speed. Enhanced Email Subject Control: Customize the email subjects sent during order status changes for better customer communication. Additional Category Description Field: We've added an extra text field in category descriptions for improved flexibility. New Modules: Two new modules are part of this release. One is free for everyone, allowing you to filter specific email domains in the contact form to reduce spam. The other, part of our Premium module pack, limits email-sending attempts from individual IPs, helping to prevent spam attacks. For just $15 a month, the premium pack includes this and other powerful tools to boost your efficiency. You can find all premium modules in the backoffice of your store! Love Thirty Bees, Please Support Us: For non-members, we have introduced a campaign to support Thirty Bees’ ongoing development. After a period, you’ll see a pop-up asking if you’d like to join us as a member or make a donation to support our work. Don’t worry; this pop-up won’t reappear for another two months, so it remains far from intrusive. Paying members, however, will not see this pop-up at all. How can you Support / Help Thirty Bees? We all love Thirty Bees and it has made many businesses thrive and be successful. The truth is that we’ve come a long way together, but there’s still so much more we can achieve. To continue growing, we need your help. We’re looking to expand our team, improve our platform, and spread the word about ThirtyBees to new users and developers. But we can’t do it alone. This is where our community comes in. How You Can Help: Leave a Review on TrustPilot: If ThirtyBees has helped your business, we’d love for you to share your experience. Positive reviews on TrustPilot not only help us reach more people but also build trust within the community. Support Us with a Donation or become a Supporter: Your contributions will directly help us bring more developers on board, enhance the platform, and support our growing user base. Every little bit counts, and it all goes back into making ThirtyBees even better. Spread the Word: Tell your friends, colleagues, and fellow entrepreneurs about ThirtyBees. Your endorsement is the most powerful tool we have to grow our community. Continue to Engage with Us and other Users in the Forum: Share your ideas and feedback, continue to help others like you always have. ThirtyBees thrives on the input and energy of our community. We love and appreciate that you are here! You are what makes ThirtyBees great! We believe in the potential of ThirtyBees and the strength of the community behind it. Together, we can continue to build something amazing—an eCommerce platform that truly serves its users and grows with them. Thank you for being a part of our journey. Your support means the world to us. Happy selling! Petr, Theo & Chiel Image rewrite generic mechanism to define and generate image types for any entity (categogry, products, blog posts,...) unified support for all image formats for all entities avif format chores updated librarires Remove dependency on Jaybizzle\CrawlerDetect, replaced by tbdetectcrawler module donate campaign small enhancements Product supplier: new columns name and comment Order Statuses: support for custom email subject Display calculated weight for pack products Category: new field Additional Description Hreflang: ability to override hreflang mappings Support shortcodes in order messages in backoffice Buttons to delete empty/old carts Automatic deletion of old css, js, and log files. Configurable retention Add button to close threads older than 30 days Expose CMS Categories to webservice New hook - displayAdminCartFooter hook Improve search indexation logic Contact form: support custom validation (two new premium modules - ban ip address, filter messages by content) Save maintainance IP addresses globally Import combination: mechanism to delete only combinations for products referenfed in CSV files Pass {invoice_number} placeholders to order status email templates Better Linux and Windows compatibility Information page: use asynchronous test to prevent page timout Cookie serialization: support saving all filter values privacy and security lot of security fixes Stop using google fonts in back office bugxies PHP compatibility fixes Better logging Fix Saving specific price without rules does not refresh specific prices on products Back office lists error handling Back office lists filter values serialization Category alternate url: check enabled flag Fix SpecificPriceRuleCore::getAffectedProducts Fix deleting default attribute Language deletion - fix directory cleaning Proportionate taxes: Fix shipping tax calculation Contact form: verify that order belongs to customer Fix error with cheapest product cart rules Clear op cache after zip extraction, fixing modules update Fixed translation extraction Fix download product link generation Use debug error page during installation Import: set out_of_stock only when provided KPI: fix refresh functionality Fix issue with incorrect tax breakdown Carrier selection issues Fix carrier weight restriction
    10 points
  2. Hello everyone, I'd like to announce new upcoming feature, and as always ask for testing and reporting any and all issues, problems, and enhancement requests. This new functionality is names List Filters. You can test it by upgrading your store to list-filters branch (using core updater in custom targets) What this new functionality do? On every (filterable) lists in back office you will find a new icon in upper right corner: When you click on it, new section will appear. Here, you can define additional filters that will be applied to the list. The new filters are applied together with the standard filters from list header. But these new filters are slightly more powerful, because you can select operator - not, contains, starts with, between, any of Also, developers can define additional filters in AdminControllers that do not depend on list columns. For example, I have added new filter fields for Order list controller - (Customer - Email, Customer - First Name, Customer - Last Name). So you can filter order list by customer email, even though customer email is non one of list columns! We will be slowly adding more and more filter fields based on your suggestions. Let us know what you need!. This functionality is not 100% completed, but it's quite stable. I've been using it on few production servers without any issues for a few weeks now, so it should be safe for you to test it as well. We already have a few enhancement we want to implement. One of them is support for filter presets -- you will be able to save your filter settings, and easily switch between different presets. Now it's your turn. Please test and give feedback. I'm sure there is a lot to improve here. I'm very excited about this new feature, as I wanted to do have this for a few years now. And finally it's coming 🙂
    7 points
  3. I created a small free module that updates all search engines that support the IndexNow ping protocol. As you might know Google is still not fully supporting it but other engines as Microsoft Bing, Naver, Seznam.cz, Yandex, Yep do. And if those are important for your markets this module might help you. https://github.com/therampagerado/tbindexnow/ Any help in developing the module is welcomed if you find this idea useful. Best regards, Rado
    6 points
  4. Hi everyone We've updated the Shops using ThirtyBees page + home page banner as requested. https://thirtybees.com/powered-by-thirty-bees/shops-using-thirty-bees/ If your site isn't on there or if there's an issue, please let me know and we'll sort it out asap. Thanks to @the.rampage.rado and everyone else concerned for creating the list and everyone who submitted their sites! I must say, seeing these sites, I was super impressed - some are even giving Shopify and Prest*sh*p a run for their money - especially in terms of designs. Obviously our sites are on ThirtyBees, so they're just better anyways 😉 Well done to all, and keep up the good work and please remember, if you haven't already, to please support ThirtyBees and become a member 😉 Your support helps us keep ThirtyBees alive and help it grow and thrive! https://forum.thirtybees.com/support-thirty-bees/
    6 points
  5. Hey everyone! I wanted to share my experience with thirty bees. If you’ve been searching for a robust, feature-rich solution for your online store, I think you’ll be pleasantly surprised by what thirty bees has to offer. Here are some of the reasons I’m running it on all my shops since it's fork : Focus on Stability and Performance One of the biggest headaches in e-commerce can be platform instability - nobody wants a store that crashes or slows to a crawl. thirty bees is built with performance in mind, ensuring that page loads remain snappy and your store stays responsive. This means a better experience for your customers and less downtime for you. It supports most modern caching solutions and runs on apache, litespeed and nginx servers. Easy Migration If you’re already running an online shop on PS or a similar platform, moving to thirty bees can be straightforward. The developers have put a lot of effort into making the migration process smooth. That means you don’t have to reinvent your store from scratch or lose your hard-earned data and customizations. Some troubleshooting will be required if you have to migrate from very old php versions (v5) but there are plenty of help here in the forum and people that can do the job if you're not confident with it. Open-Source Community thirty bees is an open-source project, which means you get the benefit of a community of developers, merchants, and enthusiasts who actively contribute to improvements, security patches, and new features. You’re not tied to a single vendor for updates or support—you can tap into a global network of experts. If you need support or you need some of the quality premium modules you can subscribe for a tiny sum per month, but it's strictly your choice. Rich Feature Set Whether you need advanced product attributes, multiple languages, detailed analytics, or a robust checkout process, thirty bees has you covered. It provides a wide range of native modules and integrations, making it easy to tailor the platform to your store’s needs without having to rely on countless add-ons. New features are added on regular basis while trying to keep compatibility with themes and modules from established developers - packs with attributes, list filters for BO and many more! User-Friendly Back Office The admin panel is designed to be accessible and intuitive, so you can spend more time focusing on growing your business rather than wrestling with confusing settings. Tasks like adding products, managing inventory, and processing orders feel straightforward. If you are bored with just one shop, switch Multistore ON and make your second shop in the same installation - save on development time and running expenses. Strong Compatibility Because it’s based on a well-known e-commerce framework, thirty bees supports a lot of existing modules and themes. You can often bring your favorite PS modules over, or tap into the thirty bees - specific extensions developed by the community. Active Development The team behind thirty bees is committed to ongoing improvements and enhancements. That means bugs get fixed quickly, and you can expect new features to roll out regularly. Staying current helps keep your store secure and competitive. If you find any bugs or request new feature you can post here: https://github.com/thirtybees In Conclusion If you’re looking for an e-commerce solution that combines reliability, performance, and an active, helpful community, I highly recommend giving thirty bees a try. It’s been a breath of fresh air for my online stores, and I’m confident it could be the same for you. If you have any questions about migrating or just want to talk shop, let’s discuss it on the forum! And now a personal appeal to the fellow forum members: thirty bees thrives on community support. Whether you subscribe, donate, or contribute your development skills, your help drives innovation and secures the future of our platform. Our because it is made and maintained by fellow dedicated merchants and developers.
    6 points
  6. Hi everyone, I'd like to ask you for a help with testing upcoming new feature - Packs with Combinations. As you may know, it is currently not possible to have combinations for Pack products. This new feature add supports for that. What is it good for? For example, let say you are selling sport equipment. You want to create a bundle for soccer players containing soccer ball, socks, and cleats. Every one of those products in pack can have different variants (ball can have size 1-2-4-5, socks can have different colors and sizes,...). Because thirty bees does not support packs with combinations, you would have to create a dedicated Pack Product for every combination of products that you want to sell. That's not very user friendly, and it's very hard to maintain. That's why we have this new feature. How it works: 1) When you are adding a product with combinations to your pack, you can now select a special item variant named virtual attribute. (It's stupid name, I know. I'm open for better name suggestions 🙂 ) 2) when you add this special variant to the pack, and save the product, thirty bees will automatically generate a matching Attribute containing all combinations of that product. This is a special Attribute that can be only used by Pack products that contains the virtual attribute item. System will make keep the attribute values in sync with existing combinations. You can rename the attribute name, and also rename the attribute values. 3) In pack product, you can use this new attribute to create/generate combinations: 4) On front office, you now have an option to select specific combination of a pack: This approach is not the nicest. I personally don't like the need for dedicated Attribute that is kept in synch with specific product combinations. But by doing it this way, we have achieved backwards compatibility. Every modules that work with combinations/attributes can work with that. There are a lot of corner cases that I'd like your help with testing. If you are willing to help, you can use core updater. In module settings, select 'custom target' as your distribution channel, and then update to branch pack-combinations: Thank you for your help!
    5 points
  7. Thirty bees is still alive, that is the only thing that counts for me 😊 A lot of great things are going on github. It would be wishful, if we could clone Datakick somewow, but might be difficult 🫠
    4 points
  8. I did some testing, and... released a new version of paypal module, and I strongly recommend everybody to update 🙂 There was a serious bug in module. When creating an order, paypal module provided current cart value instead of amount that was actually paid. This should be always the same, unless it isn't. For example, if you can do this: clicks on payment button that opens paypal checkout page open your store in different tab, and amend the cart (add/remove products, change carrier,...) switch back to paypal tab, and conclude the payment Normally, the order would be created with Payment Error state. But because of the bug in paypal module, the order would be created in Payment validated state, everything marked as fully paid. Neat.
    4 points
  9. ITX-Sklep.pl - fanless industrial computers, Delock partner in Poland https://itx-sklep.pl Since v1.0.8 loyal to TB ☺️
    4 points
  10. This module allows you to have lists of something -- usually it's list of products, customers, or orders. These lists are meant for employees only, and are usually used as some kind of todo list or trello board. There are few different ways how items can be added to the list (my examples use list of products, but similarly you could work with other entity types) 1) manually -- employee can assign products with lists in back office product page: 2) mass addition -- all products, or all products that matches some criteria can be added in bulk 3) Entry conditions You can set up list entry conditions -- when product is created, or updated, and conditions are satisfied, the product will be added to list. Example use case: Let's say I'm adding new language FR to my store, and I want to have list of all products that needs translation. I create new list named FR translation completed I perform initial load of products -- assign products by condition (english name exists, FR name does not exists) Next, I will create exit conditions (in Set rules > Exist conditionS) -- remove product from this list when product is updated, and FR translation for Name field has changed and is not empty: Now every time I edit the product that is on this list and change Name fields in FR, the product will be removed from the list. I now have a TODO list of products that needs attention of my translator: There are many other use cases. For example, when product price changes, product can be added to 'Review price' list automatically. You can have a list of orders waiting for products on backorder, or whatever. You can also create list without any entry or exit conditions, and use it for intracompany communication. For example, your employees can use lists to flag some orders for managers attention, or manually mark products that are low on stock,...
    4 points
  11. Hi everyone, I just wanted to raise your attention to the fact that cloudflare recently enabled Speculation Rules API for all plans. This functionality is designed to improve browsing speed by aggressively prefetching potential future assets/pages etc. However, these prefetch requests can be quite dangerous sometimes. Example: I'm in back office modules pages, and I click on 'Uninstall module' button. The confirmation dialog is displayed to ask if I'm sure. But the question is irrelevant - because of this new prefetch functionality, your browser already sent a request to your server to prefetch the response for the uninstall action url. The module is already uninstalled You can see the request in network tab. Even though claudflare responded with 503 error code (meaning the prefetch response will be ignored by browser), the request still made it to your server, and action was executed. If you click 'OK', thirty bees will send the actual request, and it will actually fails with error message "This module has already been uninstalled" That's nice, isn't it. The uninstall/install module buttons are not the only one that are impacted. For example, 'delete' or 'approve' or 'send' buttons in lists in back office, etc... It can also impact front office, most likely -- browser can automatically add product to a cart because it believes that user will click on the "Add to cart" button soon, so better be prepared for that... right. It's quite dangerous optimization. It's true that if thirty bees used POST instead of GET requests to implement these kind of actions, this situation could not happen. But we can't really change that. We will look into a way to prevent/mitigate this problem. Fortunately, browser is sending some HTTP headers that we can use to determine if request is a regular or prefetch, so we can use that to prevent this (hopefully) But until a fix is implemented, I advice you to disable this new prefetch optimization in your cloudflare dashboard. And to be sure, maybe even after that 🙂
    4 points
  12. did you check size of database tables? if there was no cleaning made, you can be surprised how much data is stored there, and some of the tables can have huge impact on BO speed.
    3 points
  13. Thank you for your opinion. As always, there's some truth in both opinions. There are a lot of things happening behind the scenes at ThirtyBees that's been in play for months now as we've been (slowly but steadily) working on re-invigorating the project and attempting to encourage more support. Stuff like outreach to developers, and campaigns for visibility and more. Things that are not immediately visible, but things that are definitely happening. Willingness there is and a lot of it too. Thank you for the support and for using ThirtyBees 🏆👍
    3 points
  14. Hi everyone, I’ve just released a free Thirty Bees module called Bulk Update Price, designed to help store owners save time when updating product prices. What it does: Bulk Update Price allows you to update all product prices in a selected category — either by a fixed amount or percentage. You can increase or decrease prices simply by entering a positive or negative value. Features: Update prices by percentage or fixed amount Supports positive/negative values (e.g., +10 to increase by 10%, -5 to decrease by 5€) Clean and simple admin UI Compatible with Thirty Bees 1.4 to 1.6 Works with PHP 7.3 to 8.4 Free for use on your own websites Download the module here: https://ko-fi.com/s/e02ad7afcd Feedback and suggestions are very welcome!
    3 points
  15. The standard template that datakick module installs do not contain shipping weight by default. You can very easily add it, though. GMC documentation https://support.google.com/merchants/answer/6324503?hl=en tells us that they are looking for element like this <g:shipping_weight>3 kg</g:shipping_weight> So let's edit the template, and add this element under <entry> node To get data in correct format, you need to use the expression product.packageWeight + " kg" Note that you need to do this twice if you are using GMC template for combinations, as there are two <entry> nodes in template, one for products without combinations, one for products with combination. In this case, you will need to use different expression in second node: combination.packageWeight + " kg" You can download this template: gmc-with-weight.json and install it into your datakick module, as an inspiration
    3 points
  16. Sorry ich habe das Thema total vergessen. Das wurde in meinem Shop mittlerweile auch ganz anders gelöst. Ich erachte es als sehr sinnvoll solche Produkte zurückzustellen. Wir berechnen daher bei uns einen score wo verschiedene Parameter entscheiden, wie die beste Reihenfolge ist. Aber ok das ist ein anderes Thema. Zur Lösung: der Core Code ist hier wirklich hässlich... Du verwendest auf deinem Shop das Filter Modul. Deshalb muss man die Lösung da suchen. Das Module heisst blocklayered. Suche die Datei blocklayered.php. Es gibt dort eine Funktion: public function getProducts($selected_filters, &$products, &$nb_products, &$p, &$n, &$pages_nb, &$start, &$stop, &$range) Die musst du bearbeiten... Suche die Zeile: m.name manufacturer_name, Füge danach folgendes ein: IF(stock.quantity>0,1,0) AS sort_helper, Nun füge zudem nach "ORDER BY" folgendes ein: sort_helper DESC, Nun sollte es funktionieren. Hier noch ein kleiner Screenshot: Funktioniert das so für dich? Ich konnte diesen Code nicht intensiv testen, da meine Shops nicht dieses Modul nutzen. ACHTUNG: bei jedem Update dieses Modul wirst du das wieder anpassen müssen.
    3 points
  17. Hi, I adapted Brevo's (Formerly SendInBlue) PS 1.7 version of their module to work on thirty bees and php 8.3. I didn't test on lower php versions, but it should work on php 8.0+ I believe. It connects and works and, for the price, they offer quite a bit of digital marketing functionality. Module is attached sendinblue_tb_v5.0.36.zip
    3 points
  18. Thanks to everyone who continues to support ThirtyBees, with signing up for new memberships, doing reviews, making donations and spreading the word - from all of us at ThirtyBees, a BIG Thank You!! Your support helps TB survive and thrive, and is noticed and appreciated! To those who want to help - now is the time - your support makes a BIG impact! Thank you! How You Can Help: Leave a Review on TrustPilot: If ThirtyBees has helped your business, we’d love for you to share your experience. Positive reviews on TrustPilot not only help us reach more people but also build trust within the community. Support Us with a Donation or become a Supporter: Your contributions will directly help us bring more developers on board, enhance the platform, and support our growing user base. Every little bit counts, and it all goes back into making ThirtyBees even better. Spread the Word: Tell your friends, colleagues, and fellow entrepreneurs about ThirtyBees. Your endorsement is the most powerful tool we have to grow our community. Continue to Engage with Us and other Users in the Forum: Share your ideas and feedback, continue to help others like you always have. ThirtyBees thrives on the input and energy of our community. We love and appreciate that you are here! You are what makes ThirtyBees great!
    3 points
  19. Left a review—really great project. Since version 1.1, I’ve been trying to convince clients to switch to Thirty Bees. Those who did are really happy with it. Just last month, a client called me and said that a year earlier, I had recommended Thirty Bees to them. They gave it a try and now say they’re never going back to PrestaShop. The main reason? It just works. PrestaShop requires constant maintenance—someone always has to keep an eye on it. While it may have a few more features, Thirty Bees is simply more efficient. It supports newer technologies (like PHP, often a year ahead of PrestaShop) and isn’t packed with unnecessary bloat. If someone just wants to focus on selling and running a business without headaches, Thirty Bees is the way to go.
    3 points
  20. There is a vendor dependency psr/cache that some other modules may also rely on. Updating crashes the site if you have modules that also rely on it and that have their own versions. datakick is seeing whether he can remove the dependency from the core.
    3 points
  21. Post the solution here. Most of the time production shops have issues and need a solution fast.
    3 points
  22. Hi Guys! Are you getting ready to the new EU Law regarding product safety. Here is a short summary about what it requires from store owners. When selling remotely via a website, the product listing must include: Manufacturer's details: the full name or registered name, registered trade name, or registered trademark of the manufacturer, as well as the postal and electronic address where they can be contacted; If the manufacturer does not have a residence or registered office in the EU/EEA: the full name or name, postal address, and electronic address of the responsible person (responsible entity); Information to identify the product, including its image, type, and other product identifiers; Any warnings or safety information. I already have a module that helps stores to comply with it, but in case you have any questions let me know, as I've been studying the subject a bit lately.
    3 points
  23. Nevermind. I opened an Account at Wise and even, if it's a prepaid card as well. This one got accepted 😅 🤦‍♂️
    3 points
  24. Here is a tiny module that is s till in alpha stage so please test and use with care. You want to offer virtual gift vouchers to your customers? OK then! Virtual Vouchers Generator How to use this module: 1. Create your voucher products - set those as Virtual so they don't incur delivery if ordered alone. The value of those products will be picked as voucher value. If multiple products are ordered at once the value will be combined into one voucher. 2. Specify the Product IDs for those products in Virtual Voucher Product IDs. 3. Specify the proper statuses when the virtual voucher order is considered paid in Paid Order States (IDs). 4. Configure the rest of the options to your liking. 5. Copy the cron URL and run it at proper intervals (recommended 5-10 mins). Configuration page: Email sent after order validated as paid: Check voucher page (in Niara - adjust module css to your liking!): As I'm still learning, so please keep in mind this module could (and most probably will) have some bugs. And still the lookback logic for validating the orders is not so cleared out. If in future somebody want to take over development would be more than happy. Changelog: 0.7.3 alpha (12/1/2024) - Fixed bugs with translation strings, new email template (single column, mobile-friendly), fixed bug with cron link not including https. 0.7.2 alpha - Minor bugfixes with multistore reCAPTCHA settings, voucher check page, and controller name. 0.7.1 alpha - Introduction of 'Check voucher' page where the customer can see how much funds are left into their multi-use voucher. Integrated with Thirty Bees' reCAPTCHA module (if it's installed, enabled, and configured the reCAPTCHA will be shown here too) - the customer has to enter the validity date of the voucher as a safety measure. The page's friendly URL should be configured in SEO & URLs (or if you don't use SEO URLs, access from here: /index.php?fc=module&module=tbvirtualvouchers&controller=vouchercheck). 0.7.0 alpha - Option to limit the voucher country based on where it was ordered (from invoice address), email tweaks and fixes, new logo with attribution. 0.6.0 alpha - New email template, Bulgarian email language. 0.5.0 alpha - Initial release. To do: further voucher settings add T&C section to configuration so those are attached to the email. pass conditional information to email for country restriction (if available). introduce changelog in the module. tbvirtualvouchers-0.7.2.zip tbvirtualvouchers-0.7.3.zip
    3 points
  25. I've been playing around with this idea for 2 days. Up until now I've always used dropdowns for my size selections but I would like to make them buttons. Of course thirty bees does not offer such thing currently. I tried editing the radio button case in product.tpl to display bootstrap buttons and hide the circle. Some js, some css and it works for Niara: Product.tpl changes: {elseif ($group.group_type == 'radio')} <div id="product-options" class="btn-group" data-toggle="buttons"> {foreach from=$group.attributes key=id_attribute item=group_attribute} <label class="btn btn-outline-primary {if ($group.default == $id_attribute)} active{/if}" for="group_{$id_attribute}"> <input type="radio" id="group_{$id_attribute}" class="d-none" name="{$groupName|escape:'html':'UTF-8'}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} autocomplete="off"> {$group_attribute|escape:'html':'UTF-8'} </label> {/foreach} </div> {/if} Additional css in my example to make them 'table-like' (when I have mutliple sizes): /* Ensure buttons behave like inline blocks and center content */ #product-options .btn { display: inline-block; /* Inline block to align buttons horizontally */ padding-left: 10px !important; padding-right: 10px !important;/* Adjust padding as needed */ text-align: center; /* Center text horizontally */ border: 1px solid #ccc; /* Border style */ background-color: white; /* Background color */ color: #333; /* Text color */ border-radius: 3px; /* Rounded corners */ margin: 3px; /* Space between buttons */ min-width: 65px; /* Ensure minimum button width */ white-space: nowrap; /* Prevent text wrapping */ transition: background-color 0.3s ease; /* Smooth background transitions */ outline: none; /* Remove focus outline */ box-shadow: none !important; /* Remove any shadow */ } /* Style for the selected state (checked radio button) */ #product-options .btn.active { background-color: #43b775; /* Green background for active buttons */ color: white; /* White text for active buttons */ border-color: #ccc; /* Keep the border color unchanged */ box-shadow: none !important; /* Remove any box-shadow on active buttons */ } /* Hover effect for inactive buttons */ #product-options .btn:hover { background-color: #d3d3d3; /* Light grey background on hover */ color: #333; /* Keep the original text color on hover */ border-color: #ccc; /* Keep the same border color as unselected buttons */ box-shadow: none !important; /* Remove any box-shadow on hover */ } /* Remove the black frame (focus outline) */ #product-options .btn:focus, #product-options .btn:active { outline: none; /* Remove the black focus/active border */ box-shadow: none !important; /* Remove any shadow effect */ } /* Style the radio button (which is hidden) */ #product-options input[type="radio"] { position: absolute; opacity: 0; } /* Ensure uniform text size */ #product-options .btn .label-text { font-weight: bold; /* Bold text */ display: inline-block; width: 100%; text-align: center; } Additinal js to assign the selected button to the radio buttons and sort the buttons alphabetically (as they appear in the order they are created in BO, unlike with dropdown where it sorts them): document.addEventListener('DOMContentLoaded', function() { const productOptionsContainer = document.querySelector('#product-options'); if (productOptionsContainer) { const buttons = productOptionsContainer.querySelectorAll('.btn'); buttons.forEach(function(button) { button.addEventListener('click', function() { buttons.forEach(function(btn) { btn.classList.remove('active'); }); button.classList.add('active'); const radioInput = button.querySelector('input[type="radio"]'); if (radioInput) { radioInput.checked = true; // Manually trigger the combination update in Thirty Bees if (typeof findCombination === "function") { findCombination(); } } }); }); } }); document.addEventListener('DOMContentLoaded', function() { const productOptionsContainer = document.querySelector('#product-options'); if (productOptionsContainer) { const buttons = Array.from(productOptionsContainer.querySelectorAll('.btn')); // Get all buttons // Extract the text values and sort them numerically or alphabetically buttons.sort((a, b) => { let valueA = a.textContent.trim(); let valueB = b.textContent.trim(); // Convert to numbers if possible, else compare as strings if (!isNaN(valueA) && !isNaN(valueB)) { return parseFloat(valueA) - parseFloat(valueB); } else { return valueA.localeCompare(valueB); } }); // Clear the container and re-append sorted buttons productOptionsContainer.innerHTML = ''; buttons.forEach(button => productOptionsContainer.appendChild(button)); } }); The issue is that this change does not work with Warehouse theme, I'm unable to make the button change the active combination, also the sorting does not work. My questions are: 1. Which functions were changed for detecting the combinations in this section? Currently Warehouse's implementation only adds to the cart the default combination so the js I have here does not work. 2. Can we move the sorting in the core for radio buttons? Currently it's done with a js during the output. 3. Is somebody else interested in such development and migration of the community themes? Are there people that use radio buttons in their pages in 2024? If we implement something similar for FO, the BO should still refer to them as 'radio buttons' as this is interwoven in many many parts of the system. 4. Can this be pulled into a module that replaces this part of the theme so this module could be theme-agnostic? Something similar to https://addons.prestashop.com/it/combinazioni-personalizzazione/49820-product-combination-images-swatch-attributes.html but for the buttons. 5. Shopify has a nice functionality - Swatch King - if we can implement something similar it will be nice - https://apps.shopify.com/variant-swatch-king The PS module and this also implement color swatches for combinations. The color swatches per combination is also a nice feature to have.
    2 points
  26. I managed to achieve a similar result with CSS and a slight modification of the theme tpl file. product.tpl ~451 {elseif ($group.group_type == 'radio')} <ul> {foreach from=$group.attributes key=id_attribute item=group_attribute} <li><label class="radio-btn"> <input type="radio" class="attribute_radio" name="{$groupName|escape:'html':'UTF-8'}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if}> <span>{$group_attribute|escape:'html':'UTF-8'}</span> </label></li> {/foreach} </ul> {/if} The following label was added inside the list-item element: <label class="radio-btn"> Then the CSS to get the button display that I wanted: /* applies button style to all radio elements */ /* default as configured is a block presenting a vertical stack of options */ label.radio-btn { cursor: pointer; display: block; } label.radio-btn input { position: absolute; top: 0; left: 0; visibility: hidden; pointer-events: none; } label.radio-btn span { padding: 7px 14px; border: 2px solid rgb(var(--color-dark-gray-rgb)/var(--color-opacity-03));/*replaced #EEE;*/ display: inline-block; color:var(--color-dark-gray-rgb);/*replaced #333; */ border-radius: 0.3rem; text-transform: uppercase; width:100%; } label.radio-btn span:hover { background-color:#002b45;color:#ffffff; border-color: #3498db; } label.radio-btn input:checked + span { border-color: #009BA2; color: white; background: #3498db; background-image: -webkit-linear-gradient(top, #3498db, #2980b9); background-image: -moz-linear-gradient(top, #3498db, #2980b9); background-image: -ms-linear-gradient(top, #3498db, #2980b9); background-image: -o-linear-gradient(top, #3498db, #2980b9); background-image: linear-gradient(to bottom, #3498db, #2980b9); } /*adjust fieldset styles on the radio button attributes*/ fieldset.attribute_fieldset .attribute_list ul li { float:unset; text-align:center; margin:0.5rem; } The theme is based on the Community Theme. Hopefully those who want to take an approach not requiring additional javascript will find this information helpful.
    2 points
  27. Why do we need a solution that is only needed in one store out of a million? Let the customer learn how to configure redirects in their email account. One customer wants to send to two emails, and another wants to send to two hundred 🙂 That's what redirects in the customer's email account are for.
    2 points
  28. Petr is around and working on TB stuff (some stuff may not be visible in GitHub). He is about to go on leave soon for 3 weeks. I'm curious though (perhaps I'm in a cheeky mood), if the Trusted Members here have seen this post? If we constantly worry about TB being dead, maybe we should try to do something? Like help if we haven't already? And if we have helped already (which is sincerely appreciated and awesome), maybe we can make a post there and encourage others to do the same? And maybe just maybe we can get another Petr or two or three + some new features, bug fixes, and other cool stuff while we're at it?
    2 points
  29. I believe the project is as death as the last 5 times, this was asked 😉 But you are right, @datakick is absent for some time now. I guess it's just holidays/recovery 😊
    2 points
  30. There was talk about a new Mollie module but it seems to have fizzled out. I am getting warnings from Mollie themselves about changes. Any news on this?
    2 points
  31. I've added the option to set columns as hidden by default. When you create list column, you can pass 'hidden' => true, and thirtybees will not show it by default. Here's example: https://github.com/thirtybees/thirtybees/blob/f27320165d9e788af9f702af547adaaed6e0db90/controllers/admin/AdminOrdersController.php#L179 Once we implement list column customization, we will be able to show those default hidden columns, hide columns that are displayed by default, or even reorder columns in the list.
    2 points
  32. My shop is https://maxmalt.ch/
    2 points
  33. @the.rampage.rado your post reminded me, to renew my supscription 👍
    2 points
  34. It doesn't make much sense to me either. There is a checkbox in UI for merchants to decide if they want to restock or not. Code should no make some auto-magical decisions and ignore the user-selected settings. Let's remove this.
    2 points
  35. Here is the last archive of TB installed for a new website for a friend.. it might not contain all modified modules likes currency and language.. but I have not much time to pack it again.. the may be to update github or make a new repo, but time goes fast, I'll try to do that this week. Enjoy, and please report bugs or fix them.
    2 points
  36. Hello 30knees I am always happy to work on this kind of things.. that is why I forged my own theme, and use it for myself and customers.. what do you need exactly ?
    2 points
  37. I realize this is an old thread, but it was relevant to me to remove invoice attachment in all scenarios, but still generate the document for customer access on the web, to ensure optimum email delivery with our domain (Since huge amounts of emails with attachments are a big spam flag). I resolved with this override based on a post I found on the web. (Don't judge my code please 😉) It takes an override of the PaymentModule.php file in classes/module/. Lines 695-698 below are modified. PaymentModule.php
    2 points
  38. Two entries from me for when this list is updated:
    2 points
  39. As of today it seems: Still thirty bees https://www.kabuk.co.il https://www.rigtigkaffe.dk https://www.ting-shop.dk https://snoir.dk https://sokkeposten.dk https://www.berez.co.il https://ecykelhjelm.dk https://www.quebec-amerique.com https://www.add-one.fr https://www.safetyrestore.com https://store.mindnutrition.com https://www.chesspoint.ch https://www.lens.co.il https://www.x-pens.com https://americanqualityhealthproducts.com https://www.babycompany.be https://www.bountyhuntertoys.com/store https://www.prospeed.dk https://www.led24.ee https://optlasers.com https://twighockeycompany.com https://nani.com.pl https://www.spielezar.ch https://veganline.com https://southerncottagegifts.com Returned to Prestashop https://milmanltd.co.il https://ecowarehouse.nz https://www.minikneet.com Not tb anymore https://www.susenso.nl https://www.123crea.eu https://www.belfas.com https://www.onlinetoys.com.au https://mettepshop.dk https://shop.hhof.com https://rvpartshop.com https://paradisearcadeshop.com https://4kidspoint.pl https://www.levysjewelry.co.il
    2 points
  40. Well, it's definitely a blocker. When system tries to generate thumbnails for products (or other entities), it look into db for any image types assigned to image entity. If image entity is missing in DB, no image type will be returned, and no thumbnail will be generated. So, having image entity table populated, and having image types associated with image entities, is a prerequisite.
    2 points
  41. This has been fixed. If anyone is interested what went on, here's s summary. Thirtybees contains vendor directory that have third party libraries that core depend on. We need smarty template engine to render templates, guzzle http client to send http requests to api server, tcpdf library to generate pdf, and others. These dependencies causes few problems some libraries have different implementaions for different PHP versions -- that's the reason why we have different PHP builds. We can do that as long as the library interface remains the same by having these libraries in the core vendor directory, they are autoloaded first. This can cause conflicts with modules In this particular case, we updated library mobiledetect/mobiledetectlib to latest version 4.8.09. That versions depends on yet another library psr/cache version 3.0. Previous versions of this library did not have this dependency. After update, core vendor directory contained psr/cache version 3. Unfortunately, a lot of modules (for example mollie) also uses this library, and have it in their respective vendor directory (modules/mollie/vendor). But because this library is already loaded by core, it will not be loaded from module vendor. If the module uses different version of library, than things can go bad very quickly. And that's what happened here - mollie requires psr/cache v1, but got psr/cache v3, and PHP raised exception. The fix was for us to remove the original library mobiledetect/mobiledetectlib from core -- it was replaced by library module tbdetectmobile. Now, this is not the complete fix, because there is still a compatibility problems between tbdetectmobile and mollie module -- both modules can't be installed at once. But at least it's not conflict between core and mollie module. We have released the tbdetectmobile module in different versions, that you can choose from very old version for PHP7.4 - https://github.com/thirtybees/tbdetectmobile/releases/tag/1.0.0 version for php8 that does not have dependency on psr/cache - https://github.com/thirtybees/tbdetectmobile/releases/tag/1.1.0 version for php8 that have dependency on psr/cache - https://github.com/thirtybees/tbdetectmobile/releases/tag/1.2.0 If you have a module that depends on psr/cache v1, you can't use tbdetectmobile v1.2, but you can use tbdetectmobile v1.1 It's a mess, I know, but it's the best solution I could found. In the future, we will release another version of tbdetectmobile that will change namespace of library dependencies, so it does not pollute global namespace. With that in place, the module will work correctly even if there is another module that have its own version of psr/cache library. Until that is done, you need to manually choose the correct version of the this module to use. It would be great if all modules did that -- but we can't really force that on third party modules. Side note: the mobile detection is used by core for two things only: to display mobile theme variant. As far as I know, almost none of the themes support this -- there needs to be a /mobile/ directory inside your theme that contains overrides for themes. If this directory exists, then thirty bees will use templates from this directory when request comes from mobile device. to disable some modules on mobiles/tables: Some third party modules might also depend on mobile detection. But, generally speaking, if you don't use these features, then you don't have a need for device detection, and you don't have to install the tbdetectmobile at all. Without this module, the response will be always identical for mobiles, tables, and desktop. With this module installed, the response can be different.
    2 points
  42. Hello, that's exactly what we're going to do. I'm still doing some tests, as mentioned in another topic. Datakick suggested that it could be done in 1-2 hours of work. That's money well spent. Of course you want to try things out yourself and if you're successful with small changes to the code, that's great. For other things, however, we're at the point where we'll outsource it, which includes the final adaptation for PHP 8.x.
    2 points
  43. There is no such feature. But you can make a custom query in the SQL manager in BO and pull this list: (adjust the table prefix to your needs) In general - if you want certain list to be created and it's still not a part of thirty bees you can do so with ChatGPT and save it in the SQL manager to use from BO. SELECT email, COUNT(id_customer) AS customer_count, GROUP_CONCAT(id_customer ORDER BY id_customer) AS customer_ids FROM ps_customer GROUP BY email HAVING customer_count > 1;
    2 points
  44. Hi everyone, we are happy to announce new premium module: Contact Form IP Address Blocker module First of all - this module only works on thirty bees version 1.6.0 -- if your store is not on this version, you will need to update first. Thirty bees 1.6.0 introduced new hook that allows modules to filter contact form messages. This Contact Form IP Address Blocker module use this hook to block sending messages based on IP address. It collects statistics for every IP address -- how many times it send/attempted to send contact form message. This information is shown to administrator, and they can ban IP addresses of spammers. There is also an option to automatically ban IP addresses after they send N messages in the last H hours (where both N and H can be configured) Note that the ban is for sending contact form messages only. So, if you ban somebody by mistake, they can still use your site, they just can't send you contact form message -- they are asked to send email instead. I hope you will like this new addition to our of premium modules.
    2 points
  45. I did something a little different, but similar within the warehouse theme. It's not perfect, but works pretty well still. It's a construct of CSS and JS primarily on the radios. It was with @wakabayashi's help. You can see the result here https://twighockeycompany.com/hockey-sticks/senior-sticks/rogue-c-hockey-stick-senior document.querySelector('#buy_block').addEventListener("click", function(event) { updateLabelsSelectedClass(); }); updateLabelsSelectedClass(); function updateLabelsSelectedClass() { var attributes_options = document.querySelectorAll('#attributes input'); if (attributes_options) { attributes_options.forEach(function (element) { var label = element.closest('li').querySelector('label'); if (label) { (element.checked) ? label.classList.add('labelSelected') : label.classList.remove('labelSelected'); } }) } }
    2 points
  46. 2 points
  47. I'm sure there are many. My datakick module can be used to generate xml feed for GMC. You can use channable module to export your content to channable, and from there you can push it to any number of third party services, including GMC. there is google shopping flux free module (https://github.com/d1m007/gshoppingflux) - there is some compatbility issue with thirty bees, see this PR: https://github.com/d1m007/gshoppingflux/pull/105/files and I'm sure there are many more
    2 points
  48. Normal customers can't call backoffice controller. But it doesn't necessairly mean, that you don't have issues on the FO. If you are using cloudflare, I would just deactivate it for now. I have done it and everything works fine again.
    2 points
×
×
  • Create New...