DRMasterChief
Trusted Members-
Posts
758 -
Joined
-
Last visited
-
Days Won
26
Content Type
Profiles
Forums
Gallery
Downloads
Articles
Store
Blogs
Everything posted by DRMasterChief
-
cancellation button (withdrawal button)
DRMasterChief replied to DRMasterChief's question in Technical help
Hello, thank you for your input. I have read several papers from lawyers and from the Chamber of Commerce. My concrete ideas are: we need to have a withdrawal button next to each order for the specified withdrawal period (by law or if extended by our policies) >> No, I don't want to make it that complicated, and there's no legal obligation to link it to the cancellation period. It's mandatory that the customer must be able to easily access the cancellation button anytime, anywhere (just like the legal notice). And it's important that they don't have to be logged in! It must be accessible to the customer even without logging in (e.g. for guest customers and if you have forgotten your password, it must be hold super simple for the customers). Of course, a customer could then press the button even after the cancellation period has expired, but the right of cancellation is quite clear about that, and once the time has passed, the cancellation is no longer effective (or, as a retailer, you can handle it however you like). However, I definitely want to avoid a very complicated implementation in the back office and don't want to automate any checks using back office data. The cancellation button must always be visible on the front end anyway. we should lead the customer to another page where they can confirm the request of withdrawal >> Yes, but easily accessible. I would therefore like to simply place the cancellation button in the footer, where information about shipping costs, legal notice, etc., is also found. The refund process does not need to be initiated simultaneously, nor does it need to be started digitally. This is generally covered by the right of withdrawal or the retailer's terms and conditions. we should send them email with the details of the withdrawal request >> Yes, a very simple confirmation that the cancellation has been received is sufficient. I believe that the retailer will then check it manually anyway. If you are a large retailer who has to process many returns a day, you will have a different, expensive solution programmed including payment management etc. We should have this solution simple and easy for smaller retailers. My specific idea is therefore to clone the contact form including the controller (with a new name). It already includes everything necessary: The subject selection function (customer service, etc.) should even be deleted. The heading should be renamed "Cancellation." The submit button must also be renamed, and a new email template should be created, which will then be automatically sent (by the cloned Controller) to the customer and the retailer. It is of course necessary to have a field for the customer's name and email address, as well as the order number if applicable. You might also want to include a field for the postal code to ensure consistency with the customer data and prevent misuse (however, this presents a legal hurdle). On this cancellation form, we can include a fixed text so that the customer automatically declares their cancellation. It may be helpful to add a free text field so that the customer can indicate if they are only cancelling part of the purchase. Just like with the contact form, you should probably include Turnstile (or another Captcha) to prevent the form from being misused by bots. -
cancellation button (withdrawal button)
DRMasterChief replied to DRMasterChief's question in Technical help
Hi everyone, Has no one really looked into this yet? It's coming into effect across the EU in June. I can't believe no one has started working on a solution yet. I think a paid module for this is overkill, especially since you can easily put together your own solution. Or perhaps offering a small paid module / code solution would be a good option for ThirtyBees, considering future financing, etc. @Acer Here's my post in the German forum, where I'm already working on a solution: Widerrufsbutton - Deutsches Forum - Generelle Fragen - thirty bees forum -
Widerrufsbutton
DRMasterChief replied to DRMasterChief's topic in Deutsches Forum - Generelle Fragen
@30knees danke für dein "like", kannst du daran mitarbeiten oder etwas beitragen? Wir sollten hier in der Community eine einfache Lösung erarbeiten, das wäre doch toll. (not sure if you will read this in English 🙂 ) -
Okay, we're getting quite off-topic here. But that's okay, right? 🙂 I wrote a long time ago that charging a low monthly fee can be a good approach. It absolutely mustn't scare off potential customers. It's (nowadays) very important to reach small retailers/shops that don't have a large budget. This is exactly where Thirtybees would be a great solution, and $4-5 per month for the shop as pure software would be fantastic. Payable every six months in advance. If that's too complicated to implement, offer a free 30-day trial or something similar. Then the license would need to be activated. It's important that no money-grubbing third-party provider does this (no Envato, please). And of course, it has to work flawlessly. I'd be happy to receive a license via email and have me insert it into a config file and upload it—no problem. I'm fine with that. In addition, there could be paid premium modules for ThirtyBees (as has already begun). That's fair, because nowadays it's also important to only pay for what you need. One more important point: Some information about ThirtyBees is extremely outdated. The demo, changelog, version roadmap, etc. It's also not entirely clear how and for what purpose paid support is provided; this urgently needs to be revised.
-
Good for customers? Time will tell. In any case, a lot would have to change. The current model is no longer suitable for e-commerce today (from the retailers' perspective).
-
Update Thirty Bees to stay in step with PHP - But did it work?
DRMasterChief replied to Ian Ashton's question in Technical help
@netamismb you can find a lot of ideas for an update here in this section: Updating thirty bees - thirty bees forum -
Hi, many thirty-bees/PrestaShop themes provide the variable `$cart` in the shopping cart template. Then, in the template, you can simply add: smarty {* show Cart ID *} div class="cart-id"> Cart ID: {$cart->id} </div> If it's not already available, you'll need to pass the Cart ID to Smarty via a controller. The correct controller for the shopping cart is `CartController` (controllers/front/CartController.php) (or for one-page checkout: `OrderController`, I think, you'll need to check that). If you have to retrieve it via a controller, I would create an override for it so that it persists after an update.
-
Attempt to update unsaved object , TB 1.6
DRMasterChief replied to Scully's question in Technical help
thank you, appreciate this! (i will save this time 🤙) -
Attempt to update unsaved object , TB 1.6
DRMasterChief replied to Scully's question in Technical help
Great! and can i implement this (manually) also in 1.6 ? (i get this error with php8.1 and want to fix it for my update in live-shop) -
Updating from 1.5.1 to Bleeding Edge Breaks Product Images
DRMasterChief replied to Rhapsody's question in Updating thirty bees
Thanks for the hint; I wouldn't have expected to find something like that there. I'm sure I've seen it before, but after a while, you don't think to look for it under 'Languages'. I've already changed the 404.gif image (or the equivalent for my theme) to a blank 1kB image. That works fine, and it now displays as I want. However, I still don't quite understand the reason. The image settings, etc., are correct and identical to my shop version 1.5.1. -
Attempt to update unsaved object , TB 1.6
DRMasterChief replied to Scully's question in Technical help
I have the same error with the update to php 8.1, is there any solution? I am not sure to code something for my own here, regarding it seems to be deep in the Core and it is about the shopping cart - i dont want to crash this 🤓 You can see that there is the Id 26683, but this does not exist. It seems to be an updated address and is now (customer) Id 26684. Warning Message: Attempt to update unsaved object Location: classes/ObjectModel.php line 752 Stacktrace #0 builtin #1 classes/ObjectModel.php(752): trigger_error("Attempt to update unsaved object", 512) #2 classes/Cart.php(2809): ObjectModelCore->update(false) #3 classes/Cart.php(2769): CartCore->update() #4 controllers/front/AddressController.php(307): CartCore->updateAddressId(26683, "26684") #5 controllers/front/AddressController.php(129): AddressControllerCore->processSubmitAddress() #6 classes/controller/Controller.php(198): AddressControllerCore->postProcess() #7 classes/controller/FrontController.php(264): ControllerCore->run() #8 classes/Dispatcher.php(858): FrontControllerCore->run() #9 index.php(33): DispatcherCore->dispatch() -
Updating from 1.5.1 to Bleeding Edge Breaks Product Images
DRMasterChief replied to Rhapsody's question in Updating thirty bees
I'm having problems with product images, not category images. When I look at the category overview, I see the placeholder (the product correctly has no image). When I then look at the product details, I don't see a placeholder, just nothing (white, since it has no image). -
Updating from 1.5.1 to Bleeding Edge Breaks Product Images
DRMasterChief replied to Rhapsody's question in Updating thirty bees
ok, would it be a good idea then to do this automatically, when there is no pic given? e.g. by PHP (m I correct in this?): <?php $img = imagecreatetruecolor(1, 1); imagesavealpha($img, true); $transparent = imagecolorallocatealpha($img, 255, 255, 255, 127); imagefill($img, 0, 0, $transparent); header('Content-Type: image/png'); imagepng($img); imagedestroy($img); ?> -
Updating from 1.5.1 to Bleeding Edge Breaks Product Images
DRMasterChief replied to Rhapsody's question in Updating thirty bees
Yes, everything is done as described, set SEO/URL, regenerate all pictures and so on... Changes does not have any effect. Test shop: # categoriesthumb images RewriteCond %{HTTP_HOST} ^test.domain.xyz$ RewriteRule ^categoriesthumb/([0-9]+)(\-[_a-zA-Z0-9\s-]*)?/.+?([2-4]x)?\.(avif|gif|jpeg|jpg|png|webp)$ %{ENV:REWRITEBASE}img/c/thumb/$1$2$3.$4 [L] Live shop: (i think this is the part for categoriesthumb images, i do not have a listing with # in there) RewriteCond %{HTTP_HOST} ^livedomain.xyz$ RewriteRule ^c/([0-9]+)(\-[\.*_a-zA-Z0-9\s-]*)(-[0-9]+)?/.+?([2-4]x)?\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2$3$4.jpg [L] RewriteRule ^c/([a-zA-Z\s_-]+)(-[0-9]+)?/.+?([2-4]x)?\.jpg$ %{ENV:REWRITEBASE}img/c/$1$2$3.jpg [L] and i dont have any other overrides for pictures (caused in the theme). There is the folder /thumb/ included in the test-shop rule, but why? -
Updating from 1.5.1 to Bleeding Edge Breaks Product Images
DRMasterChief replied to Rhapsody's question in Updating thirty bees
Was any solution found for this? Or what triggered it? I'm experiencing a situation where, after updating to version 1.6, the thumbnails in the category previews are populated with the camera icon when there's no actual image. Previously, nothing was displayed there at all, just a blank white space. I have the .htaccess files from versions 1.5.1 and 1.6 for comparison, but of course, I'm stuck. -
Thanks for the info. I knew about the other topic but couldn't find it right away (the one from the link). However, my experience is different; the camera icon is displayed in the category overview, but it's white in the article itself.
-
Hi Yabber, not sure about thirtybees 1.7.0 (can anyone tell the details for changes from 1.6 to 1.7 ?). My theme is well-programmed and stable, but at some point it will probably come to an end... but yes, i will try in the next days. Most important is to have the live-shop at php8.1 Now on version 1.6, it shows me the empty images (placeholder camera) for articles without a picture... hmm, so simple, but how do I change that?
-
Yes, the direct jump to 8.1 isn't documented in the manual, but it shouldn't really matter whether it's 8.0 or 8.1... I'm very careful to use only absolutely necessary modules. This saves a lot of time and effort when such a change is needed. But i have some manually changes to some files (mostly theme-related for a good look). The modules and the theme I'm using don't seem to have any problems with PHP 8.1. I'll be monitoring the collect logs for a while now. All tests are still being conducted in the test system. If nothing unusual comes up, I'll make the same changes to the live shop.
-
Hmm, okay. I see that `nd_pdo_mysql` isn't loaded under PHP 8.0, but it is under PHP 8.1 (and I can't change that while testing). Just so you know, I'm currently only changing the PHP version for a single directory (for testing purposes, there's a test shop in a subdirectory with a subdomain). I do this by .htaccess . Maybe this can cause the problem? So I have to switch from PHP 7.4 to 8.1 (which is rather unusual, I think).
-
i am on a Litespeed server and i think nd_pdo_mysql is better for php 8.x ?
-
Hi everyone, I want to upgrade from version 1.5 to 1.6 (that's already done and went quite smoothly), and of course I also want to upgrade to PHP 8.0 and higher (I'm currently on PHP 7.4). I have activated nd_pdo_mysql in cPanel. However, I'm encountering the following error, and I'm stuck... Does this have anything to do with: https://github.com/thirtybees/thirtybees/issues/1600
-
Constant changes aren't necessarily a sign of quality, but yes, it shows activity. That doesn't mean the same thing, though. 🙂 Go with thirtybees.
-
Widerrufsbutton
DRMasterChief replied to DRMasterChief's topic in Deutsches Forum - Generelle Fragen
und eine einfache .tpl dazu, was sagt ihr was ok ist und was nicht? bin kein Profi... {capture name=path}{l s='Widerruf'}{/capture} <h1 class="page-heading bottom-indent"> {l s='Widerrufsformular'} </h1> {* Erfolgsmeldung *} {if isset($confirmation)} <p class="alert alert-success"> {l s='Ihr Widerruf wurde erfolgreich übermittelt.'} </p> <ul class="footer_links clearfix"> <li> <a class="btn btn-default button button-small" href="{$base_dir}"> <span><i class="icon-chevron-left"></i>{l s='Home'}</span> </a> </li> </ul> {else} {* Fehleranzeige *} {include file="$tpl_dir./errors.tpl"} <form action="{$link->getPageLink('widerrufbut')}" method="post" class="contact-form-box box"> <fieldset> <h3 class="page-subheading">{l s='Widerruf absenden'}</h3> <div class="clearfix"> <div class="col-xs-12 col-md-3"> {* E-Mail *} <p class="form-group"> <label for="email">{l s='Ihre E-Mail-Adresse'}</label> <input class="form-control grey validate" type="email" id="email" name="from" data-validate="isEmail" value="{$email|escape:'html':'UTF-8'}" required /> </p> {* Bestellnummer *} <p class="form-group"> <label for="order_reference">{l s='Bestellnummer (optional)'}</label> <input class="form-control grey" type="text" id="order_reference" name="order_reference" value="{Tools::getValue('order_reference')|escape:'html':'UTF-8'}" /> </p> </div> <div class="col-xs-12 col-md-9"> {* Nachricht *} <div class="form-group"> <label for="message">{l s='Ihr Widerruf'}</label> <textarea class="form-control" id="message" name="message" rows="8" required>{Tools::getValue('message')|escape:'html':'UTF-8'}</textarea> </div> {* Turnstile *} <div class="form-group"> <div class="cf-turnstile" data-sitekey="DEIN_SITE_KEY" data-theme="light"> </div> </div> </div> </div> <div class="submit"> <button type="submit" name="submitwiderrufbut" id="submitwiderrufbut" class="button btn button-medium"> <span>{l s='Widerruf absenden'}<i class="icon-chevron-right right"></i></span> </button> </div> </fieldset> </form> {/if} {* Turnstile Script *} <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script> -
Widerrufsbutton
DRMasterChief replied to DRMasterChief's topic in Deutsches Forum - Generelle Fragen
Habe mal einen kleinen, (hoffentlich möglichst sauberen) neuen Controller dafür erstellt, Cloudflare Turnstile ist integriert, damit das nicht von Bots überschwemmt wird. Datei ist angehängt. Bitte mal prüfen wer davon Ahnung hat und mitarbeiten 🙂 <?php class WiderrufbutController extends FrontController { public $php_self = 'widerrufbut'; public $ssl = true; public function postProcess() { if (Tools::isSubmit('submitwiderrufbut')) { // 1) Turnstile prüfen $turnstileResponse = Tools::getValue('cf-turnstile-response'); if (!$turnstileResponse) { $this->errors[] = $this->trans('Bitte bestätigen Sie, dass Sie kein Roboter sind.'); return; } $secret = 'DEIN_SECRET_KEY'; $verify = file_get_contents('https://challenges.cloudflare.com/turnstile/v0/siteverify', false, stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: application/x-www-form-urlencoded\r\n", 'content' => http_build_query([ 'secret' => $secret, 'response' => $turnstileResponse, 'remoteip' => Tools::getRemoteAddr(), ]), ], ])); $result = json_decode($verify, true); if (empty($result['success'])) { $this->errors[] = $this->trans('Die Turnstile‑Prüfung ist fehlgeschlagen. Bitte erneut versuchen.'); return; } // 2) Formularfelder $from = Tools::getValue('from'); $order_reference = Tools::getValue('order_reference'); $message = Tools::getValue('message'); // 3) Validierung if (!Validate::isEmail($from)) { $this->errors[] = $this->trans('Bitte geben Sie eine gültige E-Mail-Adresse ein.'); return; } if (empty($message)) { $this->errors[] = $this->trans('Bitte geben Sie einen Widerrufstext ein.'); return; } // 4) Mailvariablen $mailVars = [ '{email}' => $from, '{order_reference}' => $order_reference, '{message}' => nl2br($message), ]; // 5) Mail an den Kundendienst Mail::Send( (int)$this->context->language->id, 'widerruf_admin', $this->trans('Neuer Widerruf'), $mailVars, Configuration::get('PS_SHOP_EMAIL'), null, $from ); // 6) Bestätigung an den Kunden Mail::Send( (int)$this->context->language->id, 'widerruf_customer', $this->trans('Ihr Widerruf wurde übermittelt'), $mailVars, $from, null, Configuration::get('PS_SHOP_EMAIL') ); // 7) Erfolg anzeigen $this->context->smarty->assign('confirmation', true); } } public function initContent() { parent::initContent(); $this->setTemplate(_PS_THEME_DIR_.'widerrufbut.tpl'); } } WiderrufbutController.php -
Hello, ...the cancellation button will become mandatory from June 19, 2026 in EU countries. So, this means, an electronic button is needed that allows consumers to cancel contracts online – simply, directly, and without detours. The goal: Cancellation should be as easy as signing the contract – with just one click. How do we implement this in ThirtyBees? Has anyone already considered this, or is someone working on a solution? It would be sufficient to use a copy the existing contact form and make it available for this purpose. This would also allow for the automatic sending of the email confirmation. This means, we have to copy the Controller and the .tpl from contact form to a new form? What else is to be done? Once again, the entire EU is affected, although the implementation in some countries seems to be less stringent. More informations here: The "cancellation button" (or withdrawal button) becomes a mandatory, simple, one-click feature for all EU online retailers for distance contracts starting June 19, 2026, due to EU Directive 2023/2673, requiring an easily accessible, prominent, and clearly labeled button on websites/apps to make canceling online purchases as easy as making them, preventing complex email/form processes. Key Details of the 2026 Cancellation Button: Mandatory Date: June 19, 2026. Applies To: Online retailers (websites & apps) in the EU for distance contracts (e.g., online shopping). Purpose: To allow consumers to withdraw from a contract with a single click, just as easily as they agreed to it. Functionality: It must be a digital function that's simple, clearly recognizable, and available throughout the 14-day withdrawal period. Requirements: Easy Access: Prominently placed, not hidden behind multiple clicks or logins. Clear Labeling: Clearly labeled (e.g., "Cancel Contract"). Confirmation: Clicking it leads to a confirmation page where the user submits the cancellation. Legal Basis: EU Directive 2023/2673, amending the Consumer Rights Directive. Why it's Happening: The EU aims to strengthen consumer rights and confidence in e-commerce by removing friction and complexity from the cancellation process, making it as easy as ordering. Non-compliance could lead to extended withdrawal periods (12 months + 14 days) or penalties. and also here are some informations: https://retjet.com/en/mandatory-return-button-in-online-stores-directive-2023-2673 Maybe we can arrange an good solution (without an module) in team work here?