Leaderboard
Popular Content
Showing content with the highest reputation since 10/23/2024 in all areas
-
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 restriction10 points
-
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.5.0 alpha - initial release 0.6.0 alpha - new email template, Bulgarian email language. 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.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) : 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.5.0.zip tbvirtualvouchers-0.6.0.zip tbvirtualvouchers-0.7.0.zip tbvirtualvouchers-0.7.1.zip3 points
-
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
-
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
-
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
-
@datakick OK, I noticed that the module "Block Facebook Share" was just updated to v2.1.0 today. I see that "cms.tpl" is listed under blocksharefb/views/templates/hook/. However, if I try to transplant the module "Block Facebook Share" to this cms hook, it is not seen in the drop down list under "Transplant to" using Thirtybees "Transplant a module". I only see these 3 options: displayleftColumnProduct displayProductButtons diplayRightColumnProduct Is there something else that I need to do to be able to use the cms hook for this module? Cheers, ******** EDIT Never mind, I tried uninstalling the module, then reinstalling it, and now the hook for CMS is there...1 point
-
As this is not a bug, I will not be releasing a new version to fix it. It is common that module template sometimes needs to be adjusted in order to work properly with your theme (or in this case with other module). You can simply edit file /modules/revws/views/templates/hook/home.tpl and change col-sm-12 to col-xs-12. Or, you could modify the template of the other module in a similar way.1 point
-
Indeed, the composer dependency of this module do not work properly with the composer dependencies inside core. We really need some way to have composer dependency isolated (to support different versions in every module). But that will be very hard task to implement. Meanwhile, I've released a new version of tbspreadsheetdatasource for thirty bees 1.6.0. Please update the module, and it should work again1 point
-
Fixed in bleeding edge1 point
-
We need an external solution because we use an inventory management system. A large provider that doesn't yet have a perfect solution... it's really not a good situation, but we can probably still use the legal transition period.1 point
-
If you find any errors, please file github issues. The worst that can happen is that we will close it as a not-a-bug. Related to custompayment module - we have just released new version of module that fully supports image rewrite functionality. Mostly, buggy custom code for handling image upload/deletion was deleted, and everything is handled by the core in a generic way.1 point
-
1 point
-
The code works for me. Browser doesn't like it much, though. When you select multiple orders with invoices, and then click on multi-download, browser opens multiple tabs for every invoice. This is not a normal behaviour, and browser quite correctly treat this as unwanted popups. I had to click on 'always allow popup on this site' to make this functionaltiy work. Note: please remove this code from admin.js -- that is a core file, and should not be modified. The best way to implement these changes is using custom module. I've quickly prepared a very simple module that adds custom js file to all admin pages: backofficejs-v1.0.0.zip Just install it, and then modify file /modules/backofficejs/views/js/backoffice.js in order to add your code.1 point
-
It depends on what type of voucher it is. It can be either: Single-Purpose Vouchers (SPVs) --- can be used only if the tax rate and the place of supply is known. So, if the voucher can be used only for products with standard VAT rate, and only in Bulgaria, than such voucher meet the SPV criteria. You can then collect VAT at the sale of such voucher, and voucher can be used as a standard discount. or Multi-Purpose Vouchers (MPVs) -- voucher can be used for any product, or EU-wide -- an actual VAT rate is not known at the time of voucher sale. Voucher must be sold without tax, and tax must be collected when the voucher is applied. Voucher shouldn't be used as a discount, but as a method of payment.1 point
-
That's very nice, thanks for sharing. I would just like to point to a problem related to VAT, and EU laws (https://www.vatcalc.com/eu/eu-review-of-vat-on-vouchers/) When you sell voucher, it is considered to be a MPV voucher (A multi-purpose voucher is a voucher where, at the time of issuance, the VAT treatment of the goods or services to which the voucher relates is not known). You are required to collect VAT when customer redeem the voucher. Unfortunately, thirty bees does not do that. In thirty bees, cart-rules are treated as discounts, and they affect price before tax. Example: Let say you have a product A that costs 1OO without tax, 120 with tax You also have voucher virtual product with face value 120 You sell voucher product with VAT rate 0, because VAT should be collected on voucher redemption. When your customer use the voucher to purchase a A, the voucher will decrease the pre-tax amount to zero. This will result into free order, and there will be no tax applied at all. The correct behavious should be the free order, but with applied tax. Which is obviously wrong, and you can have problems with your tax authority. In other words, credit vouchers should not behave like discounts, but more like a payment method. We are thinking about how to fix this. We will probably introduce new kind of cart rules, that will behave correctly. Note: currently, the same problem is with vouchers generated from credit notes. It just isn't so obvious, because credit notes are not used that much. Example: you customer buy product A for 120€ you collect 20€ VAT and send it to your tax authority you customer request full refund you generate credit note, and will request refund €20 from you tax authority you generate voucher with face amount €120 to your customer your customer can use this voucher to purchase product A. The voucher will reduce the pre-tax amount, and your invoice will be with zero tax You once again stole from your tax authority. You sold product A for price with tax, yet didn't actually send the tax to tax authority.1 point
-
Hello, perhaps a simple question, but important for me: is it an idea to rename a purchased module (including all files and necessary changes in them) so that it is perhaps not visible from the outside with the known name? I don't know exactly how SQL injections work, for example, but perhaps files are searched for known names (modules) and this could perhaps prevent it a little? A module always presents a certain risk until something about it appears at https://security.friendsofpresta.org/. But many developers still need many weeks or months to come up with a fix. In that case, would I have to change all the names in every file that is contained in the module? For example, if the developer calls the module 'moduleone', would I have to rename every expression 'moduleone' to 'newname'?1 point
-
You should not focus on google, but on your customers experience. Block features is, in my opinion, a nice way to showcase your best selling products to new visitors. But it's up to you. Note that having metadata about products in list miniatures is not a good idea. This template is used on a lot of places. For example, if you have 'Related Products' module enabled, it will be displayed on product page. If this template contains product metadata, it can confuse search engines. When they crawl your product page, it will see metadata about 7 products (one primary, and 6 related products). How will google know which one is the primary one? What review average ratings should it display in search results? .... these additional metadata just produce noise, and bring no benefit. My recommendation is to remove the metadata from this template anyway.1 point
-
Genau, XL! Und für die e-Rechnung siehe hier: Momentan werden nur die PDF-Rechnungen von tb an Lexoffice übermittelt.1 point
-
we use round each line / each item and i also double check the price for each item to get the right amount with rounding (depends on the fifth or sixth decimal place sometimes), no problems so far.1 point
-
OrderHistory https://github.com/thirtybees/thirtybees/blob/0913a2fa58cfd7db1e1f9ac33b99389777edba78/classes/order/OrderHistory.php#L480 Sure, we would gladly accept PR. Extra parameters passed to email templates are fine, as long as it doesn't cause errors or performance issues.1 point
-
@the.rampage.rado The order of attribute combinations in the product configuration has no meaning. If I change the “Position” in the attribute values then the order on the store front changes identically.1 point
-
I checked on TB 1.6 and sorting attribute values in BO by “Position” also works correctly on the front end on the product page.1 point
-
GreenMouseStudio's login without password module can be modified to work with thirtybees. Contact the dev and he'll customise it for your theme and modify it for thirtybees. I'm using it successfully.1 point
-
1 point
-
I understand that it would be useful for you. But it would be a lot of work for me. So I would need to charge you some money to add it. You can pm me if you want a custom addition.1 point
-
Hi All Which module would you recommend that I can use for Facebook Pixel tracking on the latest ThrityBees version? Regards1 point
-
Prestools doesn't support warehousing. That is a limitation. Few people use that, it is complex and its functionality has been reduced In Prestashop 1.7.0 points