Jump to content

bsmither

Member
  • Posts

    17,989
  • Joined

  • Last visited

  • Days Won

    603

Everything posted by bsmither

  1. We would like to have a web address to see this. It sounds strange. We want to see if there is any indication of over-aggressive page caching by the server.
  2. Try this: In includes/ckeditor/config.js, at the bottom, find: config.allowedContent = true; }; Change to: config.allowedContent = true; config.coreStyles_italic = {element : 'em'}; config.extraAllowedContent = 'i[*]{*}(*)'; }; CKEDITOR.dtd.$removeEmpty = '{i: 0}'; The same added statements can be used for other HTML tags used in unorthodox ways.
  3. I am looking at the CKEditor API docs, specifically the Advanced Content Filter (ACF) to determine the pattern rule that the editor will accept. The rule will either be that characters are required between the open and close tags, or the element has disallowed any attributes, styles, and/or classes. It is probably a combination of both. On the other hand, the editor's config.js file specifically sets 'allowedContent' to "true", and this (supposedly) switches off the filtering - allowing anything to be entered. On the third hand, the ACF filters "pasted" content from the clipboard. Content already present (loaded on editor initialization or currently being edited) is managed by other sets of rules.
  4. I've not seen anything that I could infer as being an "exclusion filter" - whatever that would be. The GA code is placed into the template and sent out to the visitor's browser. (As opposed to informing Google of any activity happening on the web server.) The visitor would have to allow the GA javascript to run (which I, personally, generally do not), then do something to trigger the GA code, and then allow that communication to leave their computer. Granted, two of those three steps involve the customer being more tech-savvy than usual. Knowing this happens at the visitor's browser, you can verify what you think should be happening by watching the web browser's diagnostic "Network waterfall" panel. (Disclaimer: I have no idea how GA is supposed to work, or what benefits one gets from using it.)
  5. Or if that table even exists. If XML is part of this version of the PHP build, there will be tables for 'xml', 'xmlreader', and 'xmlwriter'.
  6. Please note that the template rendering engine (Smarty) builds the page before the web browser gets it. Putting HTML comment tags around the Smarty commands does not stop Smarty from replacing those {commands-in-braces} with the intended content. That intended content could also have HTML comment tags. That results in nested comment tags. Look for those statements in the template as mentioned earlier, but change them to look like this: {* include file='templates/box.newsletter.php' *} and {* include file='templates/box.popular.php' *} The brace-asterisk-space sequence is Smarty's comment tag. Thus, the content will not appear in the rendered page sent out to the browser.
  7. The storefront means that the web server is working. The web server's 404 response means that the documnet /cubecart/test-category/test-product.html does not actually exist. And it would not exist because there are URL Rewrite directives in the .htaccess file that will rewrite that to index.php?seo_path=/cubecart/test-category/test-product However, there is also a needed directive that says to use as a base address this part: /cubecart. So, make sure the .htaccess file has the directive: RewriteBase /cubecart (which, I see that it does) There is also one other setting needed in the Apache configuration file: AllowOverride Finally, make sure the web server's configuation file is loading mod_rewrite. I also see in your post you are using 127.0.1.1. I suppose that will work, but I have always seen 127.0.0.1. Make sure to double-check the statements in global.inc.php.
  8. It is not inconceivable that shipping zones may have many dozens of methods. Although not excruciatingly onerous to click each row's Edit icon for the entire table, perhaps a "one click to click them all" button will make working major zone updates just a teensy bit better. In the All in One Shipping module, make these edits: In module.definitions.xml, find: <string name="edit_row"><![CDATA[Edit Row]]></string> Add after: <string name="edit_table"><![CDATA[Edit Table]]></string> In shipping_rates.tpl, find: <td colspan="7"> <a href="#" class="aios-add"><img src="{$SKIN_VARS.admin_folder}/skins/{$SKIN_VARS.skin_folder}/images/add.png" alt="{$LANG.all_in_one_shipping.add_rows}" title="{$LANG.all_in_one_shipping.add_rows}" width="16" height="16" border="0" style="padding:0 5px;" />{$LANG.all_in_one_shipping.add_new_shipping_rates}</a> </td> </tr> {for $offset=0; $offset<5; $offset++} Change to: <td colspan="4"> <a href="#" class="aios-add"><img src="{$SKIN_VARS.admin_folder}/skins/{$SKIN_VARS.skin_folder}/images/add.png" alt="{$LANG.all_in_one_shipping.add_rows}" title="{$LANG.all_in_one_shipping.add_rows}" width="16" height="16" border="0" style="padding:0 5px;" />{$LANG.all_in_one_shipping.add_new_shipping_rates}</a> </td> <td align="right">{$LANG.all_in_one_shipping.edit_table} >></td> <td colspan="2"> <input type="hidden" name="update_rates_all" value="0" size="1" /> <a href="#" class="aios-edit-all" rel="update_rates_all"><img src="{$SKIN_VARS.admin_folder}/skins/{$SKIN_VARS.skin_folder}/images/edit.png" alt="{$LANG.all_in_one_shipping.edit_table}" title="{$LANG.all_in_one_shipping.edit_table}" width="16" height="16" border="0" style="padding:0 5px;" /></a> </td> </tr> {for $offset=0; $offset<5; $offset++} The next edit is to add some new javascript that powers the "Edit All" button. Unfortunately, the AIOS javascript file is 'minimized'. Everything is on one line. Fortunately, the new code can be placed very near the beginning. In all_in_one_shipping.min.js, at about the 85th character, find: $(".chzn-select").chosen({width:"300px"}) Just in front of the dollar sign, insert the following: $("a.aios-edit-all").on("click",function(){var t=$(this).parents("table:first").find("span.aios-editable");$(t).click();var t=$(this).parents("table:first").find("input.aios-editable");return $(t).data("original",$(t).val()),!1}), The new javascript was copied and adapted from the code that powers the individual rows' Edit button. I don't understand the return statement. But it seems to work. Be sure to force your browser to reload page resources because the copy in the browser's cache is obsolete.
  9. FYI: the reason viewing demonstrations from the Marketplace does not work is because the Marketplace shows the demo in a frame (http or https does not matter). CubeCart has code that sends an HTTP header called SAMEORIGIN. This header instructs the web browser that the returned page can only be presented within a frame coming from the same web address as the web document that called it, or to show it all by itself.
  10. I wonder why unix timestamps aren't the standard. PHP has so many functions that use this value. A "human-readable" DATE/TIME SQL-language column storage type (I suppose) can be used with other SQL functions in SQL queries executing in SQL database servers. I am not 100% conversant with SQL DATE/TIME data types, but it seems to me that this value represents a date/time corresponding to some timezone that may be revealed later or not. I do not know about that. I have not double-checked CubeCart's schema for integer columns used for unix timestamps for their state of being unsigned or signed.
  11. We would want more details. For example, would the "Edit All" button: * simply convert all entries into text entry fields - which is what you would have to do for each row by clicking the edit icon, or * add/subtract a fixed amount or persentage to all values
  12. Welcome Carlos Martins! Glad to see you made it to the forums. Only two or three database columns store a date as a SQL DATE/TIME value. The other 'time'-related columns are "UNIX timestamps" - the number of seconds since Jan1,1970. There are PHP functions that take this number, and a "pattern", as arguments, and give back a phrase. The phrase can be 'fuzzy' (Yesterday, two weeks ago, etc) or absolute (4 Feb, 2018).
  13. I have a system I develop locally with. Please use 127.0.0.1 as the web address. Search these forums for my set of statements for global.inc.php with a local server. The "not found" message indicates your web server is not reading the .htaccess file, or, if it is not Apache or nginx(?), then it needs its own set of rewrite rules in its file of directives. (I can give you a set of rules for Hiawatha.)
  14. They see a period instead of an underscore in the user name, the database name, or both? Of the error messages posted above, the part where it would say the date/time and "PHP Warning" for line 97 is missing. Can we see what that part of the error message says?
  15. I can envision the jQuery plugin FileTree acquiring the ability to have an arbitrary sort. I think that would be the only way.
  16. It looks like your line numbers have doubled. That indicates that the text editor you are using is double line spacing, or the file, from a previous edit, has double line spacing already. The double line spacing happens when an editor wants to convert a Unix-style line-ending (x0A or LF) with a DOS-style line-ending (x0D0A or CRLF) and ends up putting both types at the end of the line.
  17. The admin can delete a customer, but only if that customer has not made any orders (at any status). If no orders exist for that customer, then if seleting the record from CubeCart_customer is successful, then the addressbook, group memberships, and newsletter subscriber records are deleted. I think instead of disallowing customer data from being deleted if orders exist for that customer, that the identifying data in CubeCart_order_summary be redacted. So, make an UPDATE query that X's out just a few columns of data, and sets the customer_id to '0'. This keeps the sales data in case the tax man wants some historical calculations.
  18. Not drag-n-drop, but we can make a small edit to the database query that gets all the assigned images for a given product so that the non-main images get sorted by the filename. In /classes/catalogue .class.php, near the bottom: Find the private function _productGallery(), then find the statement: Starts with: if (($gallery = $GLOBALS['db']->select Change the end of that line, from: 'ORDER BY i.main_img DESC'))) { To be: 'ORDER BY i.main_img DESC, filename ASC'))) { This edit will not survive an upgrade, but there is a hook we can use to resort the $return variable.
  19. Only if the skin is coded to show it. In Foundation, it shows in the Specification tab. And at the Advanced Search page, the customer can select the Manufacturer as a search parameter. Plugins have been written to display a "Shop by Manufacturer" as a side box.
  20. Full-width background in just the header, or edge-to-edge of the browser viewport? For Foundation, you can set a CSS property of the <body> tag, or just the <div class="inner-wrap">, or just the <div id="top_header">.
  21. Have you discussed with the customer what they did? Add some products, come back an hour later, find their basket empty? (Although, I think what you illustrate above is not caused by session timeouts. I have other ideas.)
  22. It is slightly better to have FileManager do it. You can drop more than one file (drag-n-drop one at a time) on the Browse button and there will be a list created. Then click Save and all files in the list will be uploaded and processed. There is a limit on how many megabytes can be uploaded this way. Processing the files means to place them in the /files/ directory, and make database records in the FileManager table. Another way is to FTP the files to the /files/ directory, then in admin, Downloads, click the Update File List tab. Doing this should scan through the /files/ directory and sub-directories, making sure the FileManager database table matches the contents of the /files/ directory.
  23. Last I talked to Authorize.net, they were in Delaware. Isn't Paypal in USA? Or are you looking for opinions on quality of service as opposed to simple availability?
  24. The payment gateway relies on CubeCart, CubeCart relies on PHP, and PHP relies on the CURL and OpenSSL extensions (CURL may or may not rely on an external SSL/TLS library). Looks like you are good to go.
  25. The AIOS has Shipping Zones, which can be sorted, giving some sense of priority over how AIOS finds the first eligible zone to apply a collection of shipping rates to an order. This task is then to sort the rates into an arbitrary order. Please make the following edits: In /language/module.definitions.xml, find near line 83: <string name="notify_shipping_zone_sort_order"><![CDATA[Shipping zone sort order successfully updated.]]></string> Add after: <string name="notify_shipping_rates_sort_order"><![CDATA[Shipping rates sort order successfully updated.]]></string> In /skin/admin/shipping_rates.tpl, find: <table class="list"> <thead> <tr> Add after: <th>{$LANG.all_in_one_shipping.arrange}</th> Find: </thead> <tbody id="zone_{$zone.id}_rates"> {if $RATES} Change to: </thead> <tbody class="reorder-list" id="zone_{$zone.id}_rates"> {if $RATES} Find: {if $rate.zone_id == $zone.id} <tr> Add after: <td align="center"> <a href="#" class="handle"><img src="{$SKIN_VARS.admin_folder}/skins/{$SKIN_VARS.skin_folder}/images/updown.gif" title="{$LANG.ui.drag_reorder}" /></a> <input type="hidden" name="rates_order[]" value="{$rate.id}" /> </td> Find: <tr> <td colspan="7"> <a href="#" class="aios-add"><img src="{$SKIN_VARS.admin_folder}/skins/{$SKIN_VARS.skin_folder}/images/add.png" alt="{$LANG.all_in_one_shipping.add_rows}" title="{$LANG.all_in_one_shipping.add_rows}" width="16" height="16" border="0" style="padding:0 5px;" />{$LANG.all_in_one_shipping.add_new_shipping_rates}</a> </td> </tr> Before that, add: </tbody> <tbody class="list"> In /admin/index.inc.php, near line 418, find: $rates = $GLOBALS['db']->select('CubeCart_shipping_rates', false, false, 'id'); Change to: $rates = $GLOBALS['db']->select('CubeCart_shipping_rates', false, false, 'sort_order, id'); Near line 197, find: if ($updated) { $GLOBALS['gui']->setNotify($lang['all_in_one_shipping']['notify_shipping_zone_sort_order']); } $GLOBALS['cache']->clear(); // httpredir(currentPage(array('tab'))); } Add after: /**/ //ALTER TABLE `CubeCart_shipping_rates` ADD COLUMN `sort_order` INT(11) NOT NULL DEFAULT '1' AFTER `item_rate`; $rates_order_update = array(); if (isset($_POST['rates_order']) && is_array($_POST['rates_order'])) { // Update rates order foreach ($_POST['rates_order'] as $key => $rate_id) { if ($rate_id != 0) { $rates_order_update[$rate_id]['sort_order'] = $key+1; } } } if (isset($_POST['rates_order']) && is_array($_POST['rates_order']) && Admin::getInstance()->permissions('settings', CC_PERM_EDIT)) { // Put changes into the database $rates_order_updated = false; foreach ($rates_order_update as $rate_id => $array) { if ($GLOBALS['db']->update('CubeCart_shipping_rates', $array, array('id' => $rate_id), true)) $rates_order_updated = true; } if ($rates_order_updated) { $GLOBALS['gui']->setNotify($lang['all_in_one_shipping']['notify_shipping_rates_sort_order']); } $GLOBALS['cache']->clear(); // httpredir(currentPage(array('tab'))); } /**/ In shipping.class.php, near line 54, find: $this->_all_rates = $this->_db->select('CubeCart_shipping_rates', false, false, 'zone_id, id'); Change to: $this->_all_rates = $this->_db->select('CubeCart_shipping_rates', false, false, 'zone_id, sort_order, id'); The database needs altering. You can do this in an external database management utility like phpMyAdmin. Or you can do this in CubeCart's admin, Maintenance, Query Database tab. Above the Query box, there will be a mention of a table prefix if one is in use. Be sure to edit the query to include that prefix. ALTER TABLE `CubeCart_shipping_rates` ADD COLUMN `sort_order` INT(11) NOT NULL DEFAULT '1' AFTER `item_rate`; I have not yet verified how this affects the listing shown to the customer at checkout. It should be sorted as desired.
×
×
  • Create New...