Jump to content

jasehead

Member
  • Content Count

    159
  • Joined

  • Last visited

Community Reputation

0 Neutral

1 Follower

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. By 2018/2019 code, I'm just referring to when posts were added to this topic. And by "should be", I mean that the program should be robust enough to handle +/- as input, and also AND/NOT, like this example from 2001: https://evolt.org/Boolean_Fulltext_Searching_with_PHP_and_MySQL
  2. So, would that work for OR as well? In the 2018 changes above, OR still resulted in AND. If I make the 2019 changes above and I have links or adwords set to use AND, OR and NOT in searches, are they going to need to be changed to +/- or can this be handled in the search code? In my old version, I could use AND, OR and NOT to varying degrees. My search worked on parts of words, so I could filter results for a particular product code prefix, eg. PB, and then for an item name, then remove any unwanted results. So right now, I could search for: 2019 diaries NOT bronte which would bring up all remaining 2019 diaries but keep out the one journal which has text in the description that includes 2019 and that the Bronte sisters used to keep diaries.This is a section of old code (messy, and probably based on 6.0.12 or earlier) where you should see that AND OR and NOT were picked out using $usSearchTerm, and str_replace was used on the search string to cope with NOT / AND NOT. So maybe something similar in your 2018 code around: $like = ' AND ('.implode(' OR ', $regexp).' OR '.implode(' OR ', $regexp_desc).')'; $noKeys = count($searchArray); for ($i=0; $i<$noKeys; ++$i) { $ucSearchTerm = strtoupper($searchArray[$i]); if ( ($ucSearchTerm != 'AND') && ($ucSearchTerm != 'OR') && ($ucSearchTerm != 'NOT') && (strlen($ucSearchTerm) > 0) ) { $searchArray[$i] = str_replace(array('%','_'), array('\%','\_'), $searchArray[$i]); $regexp = '%'.$searchArray[$i].'%'; $rlike .= "(I.name LIKE '".$regexp."' OR I.description LIKE '".$regexp."' OR I.product_code LIKE '".$regexp."')"; // modified? $rlike = str_replace(array(')(',') NOT ('), array(') AND (',') AND NOT ('), $rlike); // add AND between words and cope with NOT // if($i+1 < $noKeys){$rlike .= " AND ";} // add AND between words } else { if(strlen($ucSearchTerm) > 0){ $rlike .= " ".$ucSearchTerm." "; } continue; } } $rlike .= " )"; In your 2019 code, if +robot -grumpy was a way to search, then robot NOT grumpy should also be acceptable/compatible.
  3. From what I can tell, this only seems to be working as an AND search. If I try "robot OR dog" what I'm getting is "robot AND dog". Can this be modified to work with AND, OR and NOT operators in the search, eg. robot AND dog, robot OR dog and robot NOT dog? Or a complex search like: robot red dog OR cat NOT plush - which would be treated as ((robot AND red) AND (dog OR cat)) NOT plush. Or even: robot dog OR grumpy cat NOT plush NOT small - ((robot AND dog) OR (grumpy AND cat)) NOT plush AND NOT small The purpose would be to show filtered search results only with no unwanted items. --- I'm sure I've posted similar long ago (and working code for 6.0.12), but can't see any of my comments in the forums before 2016. I can only glimpse a cached version in Google search results. In any case, having this working for 6.2.5 would be great. --- I'm also seeing errors like these in the System Error Log: File: [catalogue.class.php] Line: [1897] "SELECT COUNT(I.product_id) as count, MATCH (I.product_code,I.name,I.description) AGAINST('2019 DIARIES' IN BOOLEAN MODE) AS Relevance FROM CubeCart_inventory AS I LEFT JOIN (SELECT product_id, MAX(price) as price, MAX(sale_price) as sale_price FROM CubeCart_pricing_group WHERE group_id = 0 GROUP BY product_id) as G ON G.product_id = I.product_id WHERE I.product_id IN (SELECT product_id FROM `CubeCart_category_index` as CI INNER JOIN CubeCart_category as C where CI.cat_id = C.cat_id AND C.status = 1) AND I.status = 1 AND (MATCH (I.product_code,I.name,I.description) AGAINST('2019 DIARIES' IN BOOLEAN MODE)) >= 0.5 AND AND `live_from` < UNIX_TIMESTAMP() AND `live_from` < UNIX_TIMESTAMP() GROUP BY I.product_id ORDER BY `name` ASC " - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AND `live_from` < UNIX_TIMESTAMP() AND `live_from` < UNIX_TIMESTAMP() GROUP BY' at line 1 File: [catalogue.class.php] Line: [1997] "SELECT I.* FROM CubeCart_inventory AS I LEFT JOIN (SELECT product_id, MAX(price) as price, MAX(sale_price) as sale_price FROM CubeCart_pricing_group WHERE group_id = 0 GROUP BY product_id) as G ON G.product_id = I.product_id WHERE I.product_id IN (SELECT product_id FROM `CubeCart_category_index` as CI INNER JOIN CubeCart_category as C where CI.cat_id = C.cat_id AND C.status = 1) AND I.status = 1 AND AND `live_from` < UNIX_TIMESTAMP() AND `live_from` < UNIX_TIMESTAMP() AND ((I.name RLIKE '[[:<:]]2019[[:>:]]' AND I.name RLIKE '[[:<:]]DIARIES[[:>:]]') OR (I.product_code RLIKE '[[:<:]]2019[[:>:]]' AND I.product_code RLIKE '[[:<:]]DIARIES[[:>:]]') OR (I.seo_meta_keywords RLIKE '[[:<:]]2019[[:>:]]' AND I.seo_meta_keywords RLIKE '[[:<:]]DIARIES[[:>:]]') OR (I.description RLIKE '[[:<:]]2019[[:>:]]' AND I.description RLIKE '[[:<:]]DIARIES[[:>:]]')) ORDER BY `name` ASC LIMIT 18 OFFSET 0 " - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AND `live_from` < UNIX_TIMESTAMP() AND `live_from` < UNIX_TIMESTAMP() AND ((I.' at line 1 So I searched for this line: $query = $q2.' '.$order_string.' '.$limit; And added this before it: $q2 = str_replace("AND AND","AND", $q2); // fix AND AND
  4. I think you meant: * { white-space:normal!important; } So I tried this before the </head> tag in main.php, which did the trick: <style>.humm-main { white-space:normal!important; }</style> Thanks for your help! Problem solved.
  5. In Safari developer mode. I start with the category web page by selecting the widget fortnightly payments text and right click to inspect element. I have worked through different parts of the widget, and only the <span class="humm-main"> has any css that changes to how I want it to look, and that is by switching off "white-space:nowrap" for .humm-price-info-widget .humm-description .humm-main I have tried some parent nodes but I can't change the text wrapping of the widget. Not seeing anything else that would change the test wrapping. I am testing a category page with only one item though. This is the injected CSS if you want to search for nowrap - seems to support "humm-main" as the class responsible: .humm-more-info-widget{all:unset;display:-webkit-box;display:-ms-flexbox;display:flex;border:1px solid #a9a9a9;font-size:16px;color:#333;padding:8px 24px;overflow:hidden;text-decoration:none;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:proxima-nova,sans-serif;text-align:center;background-color:#f8faf7;position:relative}.humm-more-info-widget:hover{color:#333!important}.humm-more-info-widget .humm-inside{-ms-flex-pack:distribute;justify-content:space-around;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%;max-width:900px;margin-left:auto;margin-right:auto}.humm-more-info-widget .humm-inside,.humm-more-info-widget .humm-inside .humm-main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.humm-more-info-widget .humm-inside .humm-main{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.humm-more-info-widget .humm-inside .humm-main .humm-text-area{all:unset}.humm-more-info-widget .humm-inside .humm-main .humm-text-area .humm-title{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;font-size:35px;margin:26px 10px 26px 0;line-height:120%}.humm-more-info-widget .humm-inside .humm-main .humm-text-area .humm-title .humm-strong{font-weight:900}.humm-more-info-widget .humm-inside .humm-main .humm-text-area .humm-tandc{all:unset;display:block;text-align:center;font-size:10px;margin-top:-6px}.humm-more-info-widget .humm-inside .humm-logo{all:unset;-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center}.humm-more-info-widget .humm-inside .humm-logo img{all:unset!important;height:85px!important}.humm-more-info-large-slices .humm-inside{padding-right:100px}.humm-more-info-large-slices .humm-inside img.humm-elephant{all:unset;height:160px!important;width:273px!important;margin-top:-8px;margin-bottom:-8px}.humm-more-info-large-slices .humm-inside .humm-logo{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.humm-more-info-large-slices .humm-inside .humm-logo img{all:unset;position:absolute!important;right:10px!important;bottom:10px!important;height:65px!important}@media screen and (max-width:665px){.humm-more-info-large-slices .humm-inside{padding-right:30px}.humm-more-info-large-slices .humm-inside .humm-main img.humm-elephant{margin-left:-24px!important;margin-right:-24px!important}.humm-more-info-large-slices .humm-inside .humm-main .humm-text-area .humm-title{font-size:30px}.humm-more-info-large-slices .humm-inside .humm-logo img{height:40px!important}.humm-more-info-small .humm-inside .humm-main .humm-text-area .humm-title{font-size:25px}}@media screen and (max-width:500px){.humm-more-info-large .humm-inside .humm-main .humm-text-area .humm-title{font-size:28px}.humm-more-info-large .humm-inside .humm-logo img{margin-left:-20px!important;height:70px!important}.humm-more-info-large-slices .humm-inside .humm-main{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.humm-more-info-large-slices .humm-inside .humm-main img.humm-elephant{margin-left:auto!important;margin-right:auto!important}.humm-more-info-large-slices .humm-inside .humm-main .humm-text-area .humm-title{margin-top:10px;margin-bottom:32px;font-size:35px}.humm-more-info-large-slices .humm-inside .humm-logo img{height:40px!important}}.humm-more-info-small .humm-inside{max-width:1200px;padding-right:60px}.humm-more-info-small .humm-inside .humm-main .humm-text-area .humm-title{margin:0}.humm-more-info-small .humm-inside .humm-main .humm-text-area .humm-title>div{display:inline!important}.humm-more-info-small .humm-inside .humm-main .humm-text-area .humm-title .humm-strong{font-weight:900}.humm-more-info-small .humm-inside .humm-main .humm-text-area .humm-tandc{text-align:center;font-size:10px;margin-top:0}.humm-more-info-small .humm-inside .humm-logo{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;height:50px!important;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.humm-more-info-small .humm-inside .humm-logo img{height:50px!important;position:absolute!important;right:10px!important}.humm-more-info-mini{width:auto;max-width:430px;margin-left:auto;margin-right:auto}.humm-more-info-mini img{height:90px!important;width:100%!important}.humm-price-info-widget{all:initial;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:5px 0;font-family:proxima-nova,sans-serif;line-height:20px;color:#3d4246!important;text-decoration:none!important;border-bottom:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;overflow:hidden}.humm-price-info-widget img.humm-widget-logo{all:unset;display:inline-block;margin-right:8px;height:15px!important;float:none!important;width:auto;vertical-align:baseline}.humm-price-info-widget .humm-description{display:inline-block;font-size:16px;font-weight:300;vertical-align:baseline}.humm-price-info-widget .humm-description .humm-main{margin-right:6px;white-space:nowrap}.humm-price-info-widget .humm-description .humm-main .humm-price{font-weight:600;font-size:16px!important;display:inline-block;vertical-align:baseline}.humm-price-info-widget .humm-description .humm-more-info{display:inline-block;margin-top:-3px;text-decoration:underline;font-size:.7em;vertical-align:middle;white-space:nowrap;line-height:1.23}.remodal-close{color:#666}.remodal-close:hover{color:#333}#humm-banner-top,#humm-more-info-general{display:flex;flex-direction:row;justify-content:space-around;align-items:stretch;border:1px solid #a9a9a9;font-size:16px;background:#fff;color:#333;padding:12px;overflow:hidden;text-decoration:none;box-sizing:border-box}#humm-banner-top .logo,#humm-more-info-general .logo{display:flex;flex:1 0 280px;flex-direction:column;align-items:center;justify-content:center;margin:0 auto;border-right:1px solid #333}#humm-banner-top .logo img,#humm-more-info-general .logo img{max-width:180px}#humm-banner-top .title,#humm-more-info-general .title{display:flex;flex:2 1 auto;font-family:proxima-nova,sans-serif;font-weight:700;justify-content:center;flex-wrap:wrap;align-items:center;text-align:center;margin:0 0 0 20px;font-size:1.56em;line-height:135%}#humm-banner-top .title div,#humm-more-info-general .title div{display:inline-block;vertical-align:middle}#humm-banner-top .title #narrow-screen,#humm-more-info-general .title #narrow-screen{display:none}#humm-banner-top .title .light,#humm-more-info-general .title .light{font-family:proxima-nova,sans-serif}#humm-banner-top .orange-area,#humm-more-info-general .orange-area{display:flex;flex:1 0 256px;flex-direction:column;align-items:center;justify-content:center;width:176px;margin:0 auto}#humm-banner-top{max-width:1147px;margin-left:auto;margin-right:auto}#humm-banner-top .logo{flex:1 1 250px}#humm-banner-top .logo img{max-width:160px}#humm-banner-top .orange-area{flex:1 1 200px;width:176px}@media screen and (max-width:1100px){#humm-banner-top{font-size:12px}#humm-banner-top .orange-area{flex:1 1 200px;width:176px}}@media screen and (max-width:760px){#humm-banner-top .logo{flex:1 1 150px}#humm-banner-top .logo img{max-width:110px;margin-right:12px}#humm-banner-top .orange-area{display:none}}@media screen and (max-width:625px){#humm-banner-top{font-size:10.5px}#humm-banner-top .title{margin-left:8px}}@media screen and (min-width:596px)and (max-width:1196px){#humm-more-info-general{padding:32px}#humm-more-info-general .logo{width:50%;flex:1 1 auto}#humm-more-info-general .logo img{max-width:350px;margin-right:32px}#humm-more-info-general .placeholder{width:8%;flex:1 1 auto}#humm-more-info-general .title{display:block;width:42%;flex:1 1 auto;margin-left:0;text-align:left;font-size:30px}#humm-more-info-general .title div{display:block;white-space:nowrap}#humm-more-info-general .title #narrow-screen{display:block;margin-top:.5em}#humm-more-info-general #wide-screen{display:none}}@media screen and (max-width:595px){#humm-more-info-general{padding:32px;flex-direction:column;text-align:center;max-width:595px;min-width:300px;margin-left:auto;margin-right:auto}#humm-more-info-general #wide-screen{display:none}#humm-more-info-general #narrow-screen{display:block!important}#humm-more-info-general .logo{flex:0 0 auto;width:100%;padding:30px 0 50px;border-right:none;border-bottom:1px solid #333}#humm-more-info-general .logo img{width:90%;max-width:390px}#humm-more-info-general .title{display:block;font-size:32px;margin:3rem -15px 0}#humm-more-info-general .title div{display:block;margin:0 auto}#humm-more-info-general .title #narrow-screen{margin-top:1em;margin-bottom:.65em}}.more-info-btn{font-size:16px;font-family:proxima-nova,sans-serif;font-weight:700;color:#fff;background:#ff6c00;padding:0 2em;border-radius:15px;line-height:225%;display:inline-block;overflow:hidden;vertical-align:bottom}.remodal{background:transparent;padding:0;max-width:780px}#humm-modal-iframe,#humm-price-info-modal,#humm-price-info-more-modal{width:100%;height:500px;max-height:84vh;border:none}@media(max-width:500px){#humm-modal-iframe,#humm-price-info-modal,#humm-price-info-more-modal{height:84vh}}#humm-more-info-modal{width:100%;height:760px;max-height:84vh;border:none}@media(max-width:500px){#humm-more-info-modal{height:84vh}}a[data-remodal-target]{cursor:pointer}.humm-nowrap,.nowrap{white-space:nowrap}.humm-inline-block,.inline-block{display:inline-block}.flex{display:-webkit-box;display:-ms-flexbox;display:flex} The style sheet gets injected into the <head> before the meta classes.
  6. I guess I could try something like: <script> function wrapFunction() { var x = document.getElementsByClassName("humm-main"); var i; for (i = 0; i < x.length; i++) { x[i].style.white-space = "normal"; } } </script> But where, how and when? The widget needs to be injected and the page rendered first, right? Unless the parent class white-space can be set to "normal" to prevent the child class from being changed to "nowrap".
  7. In the category list view, this is the php code: <h3> {if $product.ctrl_sale}<span class="old_price">{$product.price}</span> <span class="sale_price">{$product.sale_price}</span> {else} {$product.price} {/if} </h3> <!-- START oxipay --> {if {$product.price|substr:1} >= 50 && $product.available > 0 && $product.ctrl_stock && ((strpos({$product.name|lower|replace:'-':''}, 'preorder') === false) && (isset($product.preorder_avail_date) && !is_null($product.preorder_avail_date) && $product.preorder_avail_date != "" && strtotime($product.preorder_avail_date) < time()))} {if $product.ctrl_sale} <script id="oxipay-price-info" src="https://widgets.oxipay.com.au/content/scripts/payments.js?productPrice={$product.sale_price|regex_replace:'/[^0-9.]+/':''}"></script> {else} <script id="oxipay-price-info" src="https://widgets.oxipay.com.au/content/scripts/payments.js?productPrice={$product.price|regex_replace:'/[^0-9.]+/':''}"></script> {/if} {/if} <!-- END oxipay --> {if $product.available <= 0} <div class="row collapse"> Which becomes source HTML: <h3> $119.95 </h3> <!-- START oxipay --> <script id="oxipay-price-info" src="https://widgets.oxipay.com.au/content/scripts/payments.js?productPrice=119.95"></script> <!-- END oxipay --> <div class="row collapse"> Which becomes the generated HTML: <h3> $119.95 </h3> <!-- START oxipay --> <script id="oxipay-price-info" src="https://widgets.oxipay.com.au/content/scripts/payments.js?productPrice=119.95"></script> <a class="humm-price-info-widget" data-remodal-target="humm-price-info-modal"> <div><img alt="Humm" class="humm-widget-logo" src="https://widgets.oxipay.com.au/content/images/logo-orange.svg"></div> <span class="humm-description"> <span class="humm-main">with 5 fortnightly payments of <span class="humm-price">$23.99</span></span> <span class="humm-more-info">more info</span> </span> </a> <!-- END oxipay --> <div class="row collapse"> By changing "white-space:nowrap" to normal for ".humm-price-info-widget .humm-description .humm-main" it should allow the widget to wrap to the Foundation column div and resize with the browser. I'm just having trouble finding how and when to modify the class style. There will be similar code in the product page.
  8. I use a gateway plugin for pay by instalment (Oxipay, now humm). Part of this service includes a javascript widget that shows the pay by instalment amount. However, because of recent changes with the service provider, there have been some changes in the injected code. My main issue is that the text explaining the pay-by-instalment amount is now wider than the div for the product price and it won't wrap. The CSS for the span is set to "white-space:nowrap". Is there some way that I can take control of this javascript injected style? There are no elements identified by ID, only by class. And in the Category page in CubeCart (content.category.php), the widget is between $product.price and $product.available, just after </h3> - so the injected code will repeat for each product listed in the category page.
  9. What does CubeCart do with an image when one is uploaded in the process of creating a new product? How many variations are created? Is the original image used in the live store? If an original image is 300dpi, then are any images in the live store 300dpi as well or does that change, and does it matter?
  10. Turned out the problem was a Safari extension. When turned off, the CubeCart modals worked OK. However, that particular extension wasn't a problem prior to upgrading the OS + Browser.
  11. First thing I did was check error logs for SQL errors, but nothing found. I agree that a mod_security rule update was probably the issue - this has been a problem in the past with my hyper-vigilant web host. I did some testing today and it seems to have been remedied.
  12. It isn't a bug in 6.1.14 either. These products were created with 6.1.14 within the last few months (and updated since then with no problem) - only in the last week or so has there been any issue, which is why I think it's due to some background server update. Upgrading cubecart is not an option because that would cause a major disruption - not looking to spend weeks fixing all the new problems from an upgrade until well after Christmas. How can I capture the SQL that is generated when a product is updated so I can show this to my webhost support?
  13. This is a recent problem, so I expect it is from some background server update rather than CubeCart. I'm running CCv6.1.14 because it's been stable and upgrades are a major disruption - so no recent changes at my end. The problem is that if the product contains CASE in the product title (pencil case, glasses case) then I can not update the product - it just defaults back to the retail storefront (probably caught as a 403 or 404 error by .htaccess and redirected). The only workaround is to make the item one word, eg. pencilcase, which is not ideal. What I want to be able to do is either: use some mod to make cubecart more robust by making sure the string is being treated as just a string, and not containing SQL commands, or capture the SQL that is generated when a product is updated so I can show this to my webhost support Any help?
  14. Just a heads up that Apple's sensitivity about blocking popups in Safari seems to have rendered any "delete" modal dialogue boxes in CubeCart useless. In 6.1.14, clicking the delete icon on a customer address or credit card details should show a modal that asks for an OK to confirm the deletion. A recent upgrade to MacOS Mojave 10.14 and Safari 12.0 has seen the behaviour change to no modal box displayed and the page hangs. It is possible to reload the page. A workaround is to copy the link from the delete icon, and paste this into the address bar to activate (skipping the modal). Or just use another browser. I have not found any settings in the Safari 12.0 browser that will allow CubeCart modals to display correctly (content blockers off, popups allow). If the modal popup method hasn't changed in later versions of CubeCart (eg. 6.2.2) then other Mojave+Safari users may find the same problem.
×
×
  • Create New...