-
Posts
107 -
Joined
-
Last visited
-
Days Won
7
Content Type
Profiles
Forums
Gallery
Downloads
Articles
Store
Blogs
Everything posted by Adik
-
Petr thanks for a new module! We can log in to the Customer's account at any time and place an order for it. Useful if the customer is on the way and wants to urgently order something. Do you plan another paid modules? Editing the placed order will be very useful (modify the form of payment and shipping type/cost, change the quantity of the product, add/delete products...).
-
Great, is it possible to use with v7.0.0? On the official website I can not find the installer for version 6.3.0.
-
Thank you Petr, do not forget about expires of webp files: location ~* \.(eot|ttf|woff|eof|woff2|css|js|jsonp|jpg|jpeg|gif|png|ico|svg|webm|mp3|mp4|webp)$ { add_header Access-Control-Allow-Origin *; # ~ 10 Days expires 604800s; }
-
I wonder how to improve the pagespeed results (mobile devices) on the default Thirtybees template. At the moment I am using a VPS server, hosting hetzner.de, localization Nuremberg (Germany): 4 vCPU's, 16GB RAM, 80GB NVMe SSD. Clean installation of TB 1.0.8 + sample products and categories. Speed results: 98 points for computers, only 68 points for mobile devices. Demo store on https://front.thirtybees.com/ gets 100 points for computers and 98 points for mobile dev. My configuration: Debian 9.8 nginx/1.15.12 PHP 7.2.17-1 Memory limit: 128M Max execution time: 30s Smarty enabled + Force compilation + Type of caching: file system CCC enabled (keycdn.com) Memory cache enabled (APC) Here is my nginx config: server { listen *:80; listen *:443 ssl http2; ssl_certificate_key /etc/nginx/ssl/mysite.com.key; ssl_certificate /etc/nginx/ssl/mysite.com.pem; ssl_protocols TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; ssl_dhparam /etc/nginx/ssl/dhparam.pem; server_name mysite.com www.mysite.com; root /var/www/mysite/public_html; access_log /var/www/mysite/logs/access.log; error_log /var/www/mysite/logs/error.log; index index.html index.htm index.php; client_max_body_size 60M; fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; fastcgi_connect_timeout 600; fastcgi_send_timeout 600; fastcgi_read_timeout 600; rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last; rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last; rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last; rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last; rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last; rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last; rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$1$2$3.webp break; rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$2/$1$2$3$4.webp break; rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$2/$3/$1$2$3$4$5.webp break; rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.webp break; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.webp break; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.webp break; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.webp break; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.webp$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.webp break; rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.webp$ /img/c/$1$2$3.webp break; rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.webp$ /img/c/$1$2.webp break; try_files $uri $uri/ /index.php$is_args$args; add_header Strict-Transport-Security max-age=31536000; resolver 127.0.0.1; location ~* \.(eot|ttf|woff|eof|woff2|css|js|jsonp|jpg|jpeg|gif|png|ico|svg|webm|mp3|mp4|webp)$ { add_header Access-Control-Allow-Origin *; # ~ 10 Days expires 604800s; } location ~ \.tpl { deny all; } ######### ## PHP ## ######### location ~ [^/]\.php(/|$) { fastcgi_index index.php; include /etc/nginx/fastcgi_params; # depending on version, could be : include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
-
Hello Petr, I will prepare a subdomain with test shop and send details to your e-mail.
-
Petr, could you share your nginx.conf section for webp support? is that enough? map $http_accept $webp_extension { default ""; "~*webp" ".webp"; }
-
Double check this line in your config /etc/apache2/sites-available/... <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php7.0-fpm.sock|fcgi://localhost/" </FilesMatch>
-
Hello, Which version of PHP do you have installed on your VPS? I prefer nginx, after upgrade to php 7.2 I had to change the entry php5.3-fpm.sock to php7.2-fpm.sock in nginx config file (sites-available directory). I recommend nginx, along with php-7.2 the store works very fast. location ~ [^/]\.php(/|$) { fastcgi_index index.php; include /etc/nginx/fastcgi_params; # depending on version, could be : include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
-
I have similar problem as spidawebs. Despite activating the module and adding my IP the module does not work. I see only the menu and footer.
-
Hi, Where can I delete the entry ?categories= from CMS page? At the moment I have: about-us.html?categories= terms-and-conditions-of-use.html?categories= Thanks.
-
@adik said in Version 1.0.4 has been released: After upgrade from 1.0.3 to 1.0.4 no errors in admin panel. But I have been struggling with one problem since end of February. I remember that there was an update at the time. Despite the new orders, the chart stats in Desktop is not updated. Here's the solution that works for me: https://forum.thirtybees.com/topic/1720/stats-do-not-show-orders-and-carts-correctly-tb-1-0-4 The only problem I have today is with 10 best-selling products. The list does not update from January 2018.
-
Stats do not show orders and carts correctly TB 1.0.4
Adik replied to rubben1985's question in Bug Reports
Hello, I think only orders that have invoice counts. Please check this solutions: touch file /override/controllers/admin/AdminStatsController.php with below code. After this delete /cache/class_index.php. ``` <?php class AdminStatsController extends AdminStatsControllerCore { public static function getTotalSales($datefrom, $dateto, $granularity = false) { if ($granularity == 'day') { $sales = array(); $result = Db::getInstance(PSUSESQLSLAVE)->ExecuteS(' SELECT LEFT(date_add, 10) as date, SUM(totalpaidtaxexcl / o.conversionrate) as sales FROM '._DB_PREFIX_.'orders o LEFT JOIN '._DB_PREFIX_.'order_state os ON o.currentstate = os.idorderstate WHERE date_add BETWEEN "'.pSQL($datefrom).' 00:00:00" AND "'.pSQL($dateto).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o').' GROUP BY LEFT(date_add, 10)'); foreach ($result as $row) { $sales[strtotime($row['date'])] = $row['sales']; } return $sales; } elseif ($granularity == 'month') { $sales = array(); $result = Db::getInstance(PSUSESQLSLAVE)->ExecuteS(' SELECT LEFT(date_add, 7) as date, SUM(totalpaidtaxexcl / o.conversionrate) as sales FROM '._DB_PREFIX_.'orders o LEFT JOIN '._DB_PREFIX_.'order_state os ON o.currentstate = os.idorderstate WHERE date_add BETWEEN "'.pSQL($datefrom).' 00:00:00" AND "'.pSQL($dateto).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o').' GROUP BY LEFT(date_add, 7)'); foreach ($result as $row) { $sales[strtotime($row['date'].'-01')] = $row['sales']; } return $sales; } else { return Db::getInstance(PSUSESQLSLAVE)->getValue(' SELECT SUM(totalpaidtaxexcl / o.conversionrate) FROM '._DB_PREFIX_.'orders o LEFT JOIN '._DB_PREFIX_.'order_state os ON o.currentstate = os.idorderstate WHERE date_add BETWEEN "'.pSQL($datefrom).' 00:00:00" AND "'.pSQL($dateto).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o')); } } public static function getOrders($date_from, $date_to, $granularity = false) { if ($granularity == 'day') { $orders = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT LEFT(`date_add`, 10) as date, COUNT(*) as orders FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state WHERE `date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o').' GROUP BY LEFT(`date_add`, 10)'); foreach ($result as $row) { $orders[strtotime($row['date'])] = $row['orders']; } return $orders; } elseif ($granularity == 'month') { $orders = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT LEFT(`date_add`, 7) as date, COUNT(*) as orders FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state WHERE `date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o').' GROUP BY LEFT(`date_add`, 7)'); foreach ($result as $row) { $orders[strtotime($row['date'].'-01')] = $row['orders']; } return $orders; } else { $orders = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT COUNT(*) as orders FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state WHERE `date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o')); } return $orders; } public static function getPurchases($date_from, $date_to, $granularity = false) { if ($granularity == 'day') { $purchases = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT LEFT(`date_add`, 10) as date, SUM(od.`product_quantity` * IF( od.`purchase_supplier_price` > 0, od.`purchase_supplier_price` / `conversion_rate`, od.`original_product_price` * '.(int)Configuration::get('CONF_AVERAGE_PRODUCT_MARGIN').' / 100 )) as total_purchase_price FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state WHERE `date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o').' GROUP BY LEFT(`date_add`, 10)'); foreach ($result as $row) { $purchases[strtotime($row['date'])] = $row['total_purchase_price']; } return $purchases; } else { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT SUM(od.`product_quantity` * IF( od.`purchase_supplier_price` > 0, od.`purchase_supplier_price` / `conversion_rate`, od.`original_product_price` * '.(int)Configuration::get('CONF_AVERAGE_PRODUCT_MARGIN').' / 100 )) as total_purchase_price FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state WHERE `date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o')); } } public static function getExpenses($date_from, $date_to, $granularity = false) { $expenses = ($granularity == 'day' ? array() : 0); $orders = Db::getInstance()->ExecuteS(' SELECT LEFT(`date_add`, 10) as date, total_paid_tax_incl / o.conversion_rate as total_paid_tax_incl, total_shipping_tax_excl / o.conversion_rate as total_shipping_tax_excl, o.module, a.id_country, o.id_currency, c.id_reference as carrier_reference FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'address` a ON o.id_address_delivery = a.id_address LEFT JOIN `'._DB_PREFIX_.'carrier` c ON o.id_carrier = c.id_carrier LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state WHERE `date_add` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 '.Shop::addSqlRestriction(false, 'o')); foreach ($orders as $order) { // Add flat fees for this order $flat_fees = Configuration::get('CONF_ORDER_FIXED') + ( $order['id_currency'] == Configuration::get('PS_CURRENCY_DEFAULT') ? Configuration::get('CONF_'.strtoupper($order['module']).'_FIXED') : Configuration::get('CONF_'.strtoupper($order['module']).'_FIXED_FOREIGN') ); // Add variable fees for this order $var_fees = $order['total_paid_tax_incl'] * ( $order['id_currency'] == Configuration::get('PS_CURRENCY_DEFAULT') ? Configuration::get('CONF_'.strtoupper($order['module']).'_VAR') : Configuration::get('CONF_'.strtoupper($order['module']).'_VAR_FOREIGN') ) / 100; // Add shipping fees for this order $shipping_fees = $order['total_shipping_tax_excl'] * ( $order['id_country'] == Configuration::get('PS_COUNTRY_DEFAULT') ? Configuration::get('CONF_'.strtoupper($order['carrier_reference']).'_SHIP') : Configuration::get('CONF_'.strtoupper($order['carrier_reference']).'_SHIP_OVERSEAS') ) / 100; // Tally up these fees if ($granularity == 'day') { if (!isset($expenses[strtotime($order['date'])])) { $expenses[strtotime($order['date'])] = 0; } $expenses[strtotime($order['date'])] += $flat_fees + $var_fees + $shipping_fees; } else { $expenses += $flat_fees + $var_fees + $shipping_fees; } } return $expenses; } } ``` -
lesley you have a very nice voice ;)
-
Great work guys! After upgrade from 1.0.3 to 1.0.4 no errors in admin panel. But I have been struggling with one problem since end of February. I remember that there was an update at the time. Despite the new orders, the chart stats in Desktop is not updated. Last 10/20/50 orders are shown correctly: Do you have an idea how to fix it?
-
Ok fixed. I had a custom class name in the contact-form.tpl file. BTW. For editing files I recommend the Sublime Text editor with Sublimerge 3 module. You will quickly find differences in files.
-
Yes, captcha protection works properly on the registration page.
-
Has anyone encountered a similar error on the contact page?
-
Problem with mailalerts and order confirmation not complete
Adik replied to CJ's question in Bug Reports
@cj said in Problem with mailalerts and order confirmation not complete: But in the mail which the customer receives you just see your shopname with a link to http://yourshopdomain.com/ So I think there's nothing wrong there. In my case (v1.0.3 TB version), the customer sees url of admin panel in received e-mails. So I must edit manually a few .html templates and leave only {shop_ur}. Strange... -
@SLiCK_303 Your module sends a request to review purchased products with delivery e-mail. What do you think about a single mail? At the moment the customer receives two e-mails (delivered confirmation + review request). I mean automatically send review request after 5-7 days from testing products by customer.
-
Problem with mailalerts and order confirmation not complete
Adik replied to CJ's question in Bug Reports
I just found bug (?) that can be dangerous for your stores. When editing and saving mails templates (Location -> Translations -> Translation of e-mails) variable {shop_ur} is replaced by http://yourshopdomain.com/adminfolder/{shopurl} in a few html files. After this customer receives an email with direct url to your admin panel. -
Problem with mailalerts and order confirmation not complete
Adik replied to CJ's question in Bug Reports
@cj said in Problem with mailalerts and order confirmation not complete: Why should you manually send a message to the customer using this template ? manually - I mean from Orders -> Order_numer -> Send e-mail again In the Review Request module variable {products} works in template. I want to send a request to the customer about review. -
Problem with mailalerts and order confirmation not complete
Adik replied to CJ's question in Bug Reports
You mean /themes/theme_name/mails/nl/? I have these .tpl (order_conf_cart_rules.tpl and order_conf_product_list.tpl ) files placed there. When the customer places an order, he receives an email with order_conf template - variables work properly: When I manually send a message (using the same template) to the customer, the variables do not work: -
Problem with mailalerts and order confirmation not complete
Adik replied to CJ's question in Bug Reports
Hi, Yep, I confirm this issue (order_conf.html looks ok): @CJ do you have any solution? -
Hello SLiCK_303 A great module, really helpful in getting new opinions! Unfortunately, I noticed a strange problem with my store. When I send a manual email to customer, variables like: {products}, {totalproducts}, {totaldiscounts} etc. do not work: But... it's works in the early three e-mails automatically generated by store: "welcome!", "order confirmation" and "waiting for bank transfer": Has anyone had a similar problem?
-
Hi Jeff, Thanks, works great with TB, just ordered. Product photos are more detailed, additionally page loading time has been reduced ~ 30% Here is a example: https://minipc.pl/en/series-mini200/industrial-computer-core-i3-2xlan-8xusb-dual-display-delta-mini200-i3-dc12-24v