Jump to content
thirty bees forum

Adik

Trusted Members
  • Posts

    128
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by Adik

  1. Hi everyone! For the last few years I’ve been using JoliSearch module v4.3.28. It’s been a staple in my store, but as my catalog grew to over 10k products, I felt it was time for something faster and more precise, especially for technical search terms. I’m not a hardcore developer, but I’m passionate about making my store run better. 😊 Why replace JoliSearch? JoliSearch has several limitations today: It is no longer actively maintained. Search relevance is difficult to fine-tune. Loose matching often returns hundreds of results. The first visible results are not always the most relevant. Users may leave the store because they cannot quickly find what they are looking for. In my case, searching for a popular product type returned over 500-800 products, many only partially matching the intent. That creates noise instead of helping the customer. For technical stores (industrial hardware, connectors, cables, IPC systems, etc.), this becomes a serious UX and conversion issue. Why Meilisearch? Meilisearch is a modern, open-source search engine designed specifically for high-performance, real-time search experiences. https://github.com/meilisearch/meilisearch Key characteristics: Index stored in RAM --> extremely fast response times (often 1–5 ms). Built-in typo tolerance and smart ranking. Simple and clean REST API. Lightweight and easy to self-host (currently running on same VPS as my store). Much easier to tune than older search modules. Native support includes: Synonyms Custom ranking rules Faceted search Filtering Typo tolerance controls Vector search (embeddings support) Automatic typo handling Meilisearch automatically handles common input problems: Minor spelling mistakes Missing hyphens (e.g. “usbc” vs “usb-c”) Word order variations At the same time, it allows strict control for technical catalogs: Disable typo tolerance for SKU/reference fields Limit the number of allowed typos depending on word length Keep technical codes exact (e.g. 81271, CA-SASA-12CU) This is extremely important in stores with many product references and model numbers. Dynamic suggestions & smart autocomplete The module already includes a live search endpoint and basic fast autocomplete. Further improvements (some already implemented, others in progress) include: Real-time product suggestions with image, price, manufacturer, and reference Intelligent grouping (products, categories, manufacturers, feature values) Query preprocessing for better intent detection Smart result limiting to avoid overwhelming users Even in its current state, this approach can significantly reduce search exit rates compared to classic result pages. AI integration – OpenAI embeddings & hybrid search One of the most exciting aspects is semantic search. Meilisearch supports vector search, which allows: Storing product embeddings Performing similarity-based queries Combining keyword search + semantic similarity (hybrid search) Using the OpenAI Embeddings API (or local embedding models), we can: Generate embeddings from: product name, technical parameters, categories, descriptions Store them in Meilisearch Enable natural language queries This enables: “Cable for powering laptop via USB-C 100W” “Splitter for two devices” “Industrial ethernet connector” The goal is not to replace keyword search, but to enhance it. Current status of my module After short initial testing, the results are very promising. Already implemented: Custom index (products_pl, products_eng) Batch reindexing (500 products per batch) Live progress bar in BO Live search endpoint Synonyms editor (graphical table UI) Automatic JSON generation for Meilisearch settings Query preprocessing for better intent detection Matching strategy control (strict vs fallback) Monitoring estimated result counts (to avoid result explosion) The improvement in relevance compared to JoliSearch is clearly visible, especially in edge cases e.g. “Y-type cables”, where search behavior can now be precisely controlled. The target is a search interface that behaves more like a modern SaaS-powered discovery engine rather than a traditional e-commerce search box — fast, relevant, visually structured, and intuitive for users (as shown in attached screenshot) Has anyone experimented with Meilisearch in ThirtyBees yet?
  2. Hello Peter, Is there an official fix for P24 or recommended snippet for TB to treat that state as pending and finalize the order via webhooks (payment_intent.processing/succeeded or charge.succeeded)? Also, do you suggest restoring the cart from metadata.cart_id on validation if the session is lost? I can share logs from /log/stripe_<date>.log if helpful.
  3. Hi, you can parse a comma string into multiple tags. As a result, you will get a format compatible with Google Merchant Center. 🙂 Here is my solution for <g:additional_image_link> <?php $xml = simplexml_load_file('https://my-store.com/endpoint/google-merchant-center-products-only', null, LIBXML_NOCDATA); $rss = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"><channel></channel></rss>'); $rss->channel->addChild('title', 'Google Merchant Feed'); $rss->channel->addChild('link', 'https://my-store.com'); $rss->channel->addChild('description', 'GMC-only-products'); foreach ($xml->entry as $entry) { $item = $rss->channel->addChild('item'); $gChildren = $entry->children('http://base.google.com/ns/1.0'); $mainImage = (string)$gChildren->image_link; foreach ($gChildren as $child) { $name = $child->getName(); if ($name === 'additional_image_link') { $urls = explode(',', (string)$child); $count = 0; foreach ($urls as $url) { $url = trim($url); // Skip same main image if (!empty($url) && $url !== $mainImage) { $item->addChild("g:additional_image_link", $url, 'http://base.google.com/ns/1.0'); $count++; } if ($count >= 10) break; } } else { $item->addChild("g:$name", (string)$child, 'http://base.google.com/ns/1.0'); } } } Header('Content-type: text/xml'); echo $rss->asXML(); Save as my-feed-converter.php and add new file to GMC. GMC will start processing additional product images after a few minutes. 🙂
  4. Hello, I'm looking for module which allow to create an attribute that will include several products from the e-store catalog. For example: I offer a PC. Customer can purchase an operating system (Windows Pro, IoT) directly on the product page, instead of searching for it in a catalog.
  5. ITX-Sklep.pl - fanless industrial computers, Delock partner in Poland https://itx-sklep.pl Since v1.0.8 loyal to TB ☺️
  6. copy file cookieconsent.min.js locally and add to header.tpl <script src="/modules/eucookieconsent/views/js/cookieconsent.min.js" defer></script>
  7. The quickest way is to check where is "fonts.gstatic.com" / "cdnjs.cloudflare.com" saved. Install Visual Studio Code and connect with your VPS using ssh. Now you can search thousands of files in few seconds using the options Find in Folder. You can also add: Smarty Template Support, The Pattern Language (TPL) and tpl Lang addons.
  8. I added code after enableLinkTracking : {if isset($PIWIK_RCOOKIE_TIMEOUT)} _paq.push(['setReferralCookieTimeout', '{$PIWIK_RCOOKIE_TIMEOUT|escape:'javascript'}']); {/if} _paq.push(['enableLinkTracking']); _paq.push(['disableAlwaysUseSendBeacon']);
  9. Important msg for Matomo users While browsing Google Search Console today, I discovered that GoogleBot was only loading small section of my product pages. Error from GSC: "Page resources. Failed to load 1/57 of resources" GoogleBot was blocking by matomo.js file. The solution is simple, add following line to script: _paq.push(['disableAlwaysUseSendBeacon']); Example of full code with added line: <script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); _paq.push(['disableAlwaysUseSendBeacon']); (function() { var u="https://store-domain.com/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '2']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> If you are using Matomo Web Analytics module add code to file: /modules/piwikanalyticsjs/views/templates/hook/jstracking.tpl (line 27) I discovered this when I saw that the number of reviews visible in a Google search had started to fall rapidly.
  10. Ok, here is profiling results from my toaster VPS 😄 A way to reduce CLS is to add min-height and min-width in CSS for divs that change size when page loads. I have also moved price filtering to the end of blocklayered module.
  11. Try add code to header.tpl in your theme directory: <script defer type="text/javascript" src="https://unpkg.com/default-passive-events"></script> {if isset($js_defer) && !$js_defer && isset($js_files) && isset($js_def)} {$js_def} {foreach from=$js_files item=js_uri} <script defer type="text/javascript" src="{$js_uri|escape:'html':'UTF-8'}"></script> {/foreach} {/if}
  12. What distro do you use? Do you have ssh access? Try to disable IPV6 support, for example for Debian it will be: /etc/NetworkManager/system-connections: [ipv6] addr-gen-mode=stable-privacy method=disabled
  13. I like it! 50 connections / month in gocardless will be also enough. 😊
  14. I wonder about one thing. To log in to the bank confirmation is required in app on my mobile device. It's possible to do this via API?
  15. Such a module will be very useful, no more manual checking payments! 🙂 What is expected price?
  16. @Mark Check out Cisero template from Zen described in another thread. Four months ago I was in a similar situation looking for fast and modern template. After optimization page speed improved significantly. CLS of 0.46 is too high, I'm waiting for Google update. BTW. It's still the same VPS server. Updated PHP, nginx, mariadb and Debian.
  17. Ok thanks! What is best solution to generate products XML file in ThirtyBees? Datakick module?
  18. @Yabber - nice fix, thanks! BTW. Do you know a way to resend request to Google after increasing required photo size (min. 100x100px)? Default cart image size is too small.
  19. @zen Nice & clean template! Thanks for your hard work! I'm very happy with change of store theme based on Cisero Bootstrap 5.1.1 and ThirtyBees 1.5.1 PHP 8.1. Over last 3 months I have been editing hundreds of tpl & php files to customize appearance of site. Store loads quickly, working in BO is a pleasure, sometimes I feel like I'm working at a localhost. 😄 (my ping to VPS is 14 ms). Listing of 1000 products in backoffice takes 1.354s. 😲
  20. The module is free for download so test it and share your opinion here.
  21. Thanks Petr! Works great. 🙂
  22. I'm using Bootstrap 5.1 in my theme, so I need to replace data-dismiss by data-bs-dismiss in file /classes/module/Module.php So I created a file Module.php in /override/classes/: <?php class ModuleOverride extends Module { public function displayConfirmation($string) { // Fix Bootstrap 5, added: data-bs-dismiss $output = ' <div class="bootstrap"> <div class="module_confirmation conf confirm alert alert-success"> <button type="button" class="close" data-bs-dismiss="alert">&times;</button> '.$string.' </div> </div>'; return $output; } public function displayError($error) { // // Fix Bootstrap 5, added: data-bs-dismiss $output = ' <div class="bootstrap"> <div class="module_error alert alert-danger" > <button type="button" class="close" data-bs-dismiss="alert">&times;</button>'; if (is_array($error)) { $output .= '<ul>'; foreach ($error as $msg) { $output .= '<li>'.$msg.'</li>'; } $output .= '</ul>'; } else { $output .= $error; } // Close div opened previously $output .= '</div></div>'; return $output; } } unfortunately override is not loaded. When I edited directly file Module.php in /classes/module/ fix works. Deleted cache folder and file class_index.php. I also copy file Module.php to /override/classes/module/, but it didn't help. It's possible to override Module.php?
  23. Yes, most customers choose notification by SMS. At work, you don't always have access to e-mail, mobile phone is in your pocket. Customer receives notification about shipped order (waybill number, carrier). SMS about a abandoned cart is great feature. Administrator receives notification about a new order and new account. So far, I have been using the PrestaSMS plug-in (TOPunek s.r.o.), but there are problems with gateway, SMS messages arrive next day or not at all. Module slows down backoffice, a lot of unnecessary JS effects.
  24. Don't recomended PrestaShow. Good contact at the beginning, after purchasing simple module SMSAPI - no reaction to ticket. Impossible to fix errors (IonCube coding). Old version of guzzlehttp library - unable to work with thirtybees Core Updater. Finnaly orderer SMS Notifications PRO, clean code, well-written module. I added support for SMSAPI.COM gate, it works great. 🙂 Super Notifications PRO: https://addons.prestashop.com/en/mobile/23238-sms-notifications-pro-all-in-one-sms-tools.html
  25. +1 for Stripe Payment Pro. Works great with onepagecheckoutps module.
×
×
  • Create New...