In order to view this readme you must first extract the contents of the readme folder in the distribution zip archive to a location on your computer. Once the contents have been extracted, browse to the location you extracted the readme folder and open "index.html".
If you have already followed the above instructions and are still receiving this message, ensure your browser is configured to allow javascript.
When this module is installed it provides an administrative page for configuring USU. After a successful login to the Zen Cart administrative interface, users granted permission can access the configuration page can select
.If any of the cache settings for Ultimate URLs have been enabled, until the cache is reset existing URLs in the cache will be used. This means one may not see the effect of changing configuration options immediately.
By default cached URLs will be saved for 30 days. The cache can be reset by changing the "Reset URL cache" configuration option to "true".
Users of various Numinex modifications for Zen Cart may run into some issues configuring this module. This is not a bug with Ultimate URLs. The errant behavior is caused by alterations made by Numinex to the Zen Cart "configuration.php" file.
Basically, Numinex made the assumption it was safe to ignore one of the Zen Cart database fields related to displaying configuration values. This field is used by the Zen Cart configuration management page to display the current value configured for a configuration option.
Ultimate URLs makes use of this core Zen Cart database field to display the values, to determine when a selectable option has been changed (did the admin change how category URLs should appear?), verifies the settings are valid and compatible, correct any invalid settings, and to reset the URL Cache. All this is done on behalf of the admin user without requiring any manual intervention through the use of the core Zen Cart database field Numinex has decided to ignore.
So the end result is: The alterations made by Numinex break the additional functionality utilized by this module. Until the following (or similar code) is added back into "configuration.php", Numinex users with the modified file will experience issues configuring Ultimate URLs.
Numinex users who have installed the Numinex modifications to Zen Cart's "/admin/configuration.php" and are experiencing the above issues should apply the workaround listed in Recommended Patches.
The following bugs / issues in other code (not Ultimate URLs) have been identified: during the QA testing of Ultimate URLs, feedback in the Ultimate URLs support thread, and by the Zen Cart community. If any of these apply to your Zen Cart installation, we recommend you apply and test the recommended fixes on your site before installing Ultimate URLs.
Many of these patches and workarounds affect all Zen Cart stores, not just stores using Ultimate URLs. Please take the time to review all of the patches and workarounds. Failure to install applicable patches and workarounds will result in undesired behavior.
Keeping your version of Zen Cart up to date is extermely important to protect your business and customers. Whenever possible using the latest release of Zen Cart is recommended. Zen Cart's official End of Life policy is to stop providing security and other patches six months after a new version is released.
Here is an example to help understand Zen Cart's End of Life policy. Zen Cart 1.5.3 was released on 5 June 2014. So according to the official policy, Zen Cart 1.5.1 went End of Life on 5 Jan 2015.
This is a known issue in Zen Cart 1.3.9 and newer
(verified to exist through Zen Cart 1.5.4).
The Zen Cart module handling product listings can
incorrectly add the "products_id" twice to a URL.
This bug can cause problems with the "Add to Cart"
behavior on product listing pages.
Here is the proposed fix (by lhungil).
This is a known issue in Zen Cart 1.3.9 and newer
(verified to exist through Zen Cart 1.5.4).
The Zen Cart "Page Not Found" page is added to
the navigation history. This can cause the "back
button" (link generated by the zen_href_back
function) to point to "Page Not Found".
Here is the proposed fix (by lat9).
This is a known issue in Zen Cart 1.5.4.
The Zen Cart "/ajax.php" calls are added to
the navigation history. This can cause the "back
button" (link generated by the zen_href_back
function) to point to non-existent pages.
Here is the proposed fix (by DrByte).
This is a known issue in Zen Cart 1.3.9 - 1.5.1 (fixed
in Zen Cart 1.5.2 and newer).
When SQL caching is enabled in the Zen Cart
configuration file
queryFactory (database calls) do not always return a
database result object (queryFactoryResult). When a
database result has been cached, functions such as
"RecordCount()" and "Move" do not
return correct information and may generate errors.
Here is the proposed fix (by lhungil).
Zen Cart already includes support for serving pages in multiple languages. Zen Cart is setup and configured for multiple languages, Ultimate URLs reads the language information from Zen Cart when generating URLs.
Ultimate URLs already supports multiple languages and multilingual stores. No modifications are needed to support multiple languages!
Optional:b> If one wishes to also add alternative language links to their pages, they can add the following snippet to "html_header.php" in their template:
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>" /> <?php // START add links specific to a "language" to the header // See http://support.google.com/webmasters/answer/189077 // Recommend disabling the individual caches to reduce the memory // footprint of using this code. The global cache can be left enabled. $tmp_lng = new language(); foreach($tmp_lng->catalog_languages as $lng) { // Initialize a new generator for a specific language (by language_id). ${'usu_' . $lng['code']} = new usu($lng['id']); // Create a link using the generator for a specific language. ${'link_' . $lng['code']} = ${'usu_' . $lng['code']}->href_link( $current_page, 'language=' . $lng['code'] . '&' . zen_get_all_get_params('language'), $request_type, false ); // Fallback to Zen Cart generated. if(${'link_' . $lng['code']} === null) { ${'link_' . $lng['code']} = zen_href_link( $current_page, 'language=' . $lng['code'] . '&' . zen_get_all_get_params('language'), $request_type, false ); } ?> <link rel="alternate" hreflang="<?php echo $lng['code']; ?>" href="<?php echo ${'link_' . $lng['code']}; ?>"/><?php unset(${'usu_' . $lng['code']}, ${'link_' . $lng['code']}); } unset($tml_lng, $lng); // END add links specific to a "language" to the header ?> <meta name="keywords" content="<?php echo META_TAG_KEYWORDS; ?>" />
The alterations made by Numinex to Zen Cart's administrative configuration page break the additional functionality utilized when configuring this module. See Configuration for more information.
Starting around line 215 in the Numinex "configuration.php" find the following code:
<div class="mod-header"> <h1><?php echo $cfg_group->fields['configuration_group_title']; ?></h1> </div> <div class="mod-content">
Replace with the following code:
<div class="mod-header"> <h1><?php echo $cfg_group->fields['configuration_group_title']; ?></h1> </div> <?php // START fix code to utilize the use_function (1 / 2) ?> <div style="padding-bottom: 1em"><?php foreach($tabs as $tab => $tab_vals) { foreach($tab_vals['options'] as $configuration_option) { if(zen_not_null($configuration_option['use_function'])) { // First call the use_function if (preg_match('/->/', $configuration_option['use_function'])) { $class_method = explode('->', $configuration_option['use_function']); if (!is_object(${$class_method[0]})) { include(DIR_WS_CLASSES . $class_method[0] . '.php'); ${$class_method[0]} = new $class_method[0](); } zen_call_function($class_method[1], $configuration_option['configuration_value'], ${$class_method[0]}); } else { zen_call_function($configuration_option['use_function'], $configuration_option['configuration_value']); } } } } ?> </div> <?php // END fix code to utilize the use_function (1 / 2) ?> <div class="mod-content">
Starting around line 233 in the Numinex "configuration.php" find the following code:
foreach($tab_vals['options'] as $configuration_option) { echo '<tr>' . "\n"; echo ' <td class="cl">' . $configuration_option['configuration_title'] . '</td>' . "\n"; echo ' <td class="cl is-details"><em>' . $configuration_option['configuration_description'] . '</em></td>' . "\n"; echo ' <td class="cl">' . "\n";
Replace with the following code:
foreach($tab_vals['options'] as $configuration_option) { // START fix code to utilize the use_function (2 / 2) $configuration_value = $configuration_option['configuration_value']; if(zen_not_null($configuration_option['use_function'])) { // Run the use_function for display purposes if (preg_match('/->/', $configuration_option['use_function'])) { $class_method = explode('->', $configuration_option['use_function']); if (!is_object(${$class_method[0]})) { include(DIR_WS_CLASSES . $class_method[0] . '.php'); ${$class_method[0]} = new $class_method[0](); } $configuration_value = zen_call_function($class_method[1], $configuration_option['configuration_value'], ${$class_method[0]}); } else { $configuration_value = zen_call_function($configuration_option['use_function'], $configuration_option['configuration_value']); } // The stock Zen Cart configuration file "reloads" the // page between displaying configuration settings and // editing a configuration setting. This "extra" query // is needed to "replicate" the default Zen Cart behavior. $query = $db->Execute( 'SELECT `configuration_title`, `configuration_value`, ' . '`configuration_description`, `configuration_key`, ' . '`use_function`, `set_function` ' . 'FROM `' . $configuration_table . '` ' . 'WHERE `configuration_id`=\'' . (int)$configuration_option['configuration_id'] . '\'' ); if (!$query->EOF) { $configuration_option['configuration_title'] = $query->fields['configuration_title']; $configuration_option['configuration_description'] = $query->fields['configuration_description']; $configuration_option['configuration_value'] = $query->fields['configuration_value']; $configuration_option['configuration_key'] = $query->fields['configuration_key']; $configuration_option['use_function'] = $query->fields['use_function']; $configuration_option['set_function'] = $query->fields['set_function']; } unset($query); } // END fix code to utilize the use_function (2 / 2) echo '<tr>' . "\n"; echo ' <td class="cl">' . $configuration_option['configuration_title'] . '</td>' . "\n"; echo ' <td class="cl is-details"><em>' . $configuration_option['configuration_description'] . '</em></td>' . "\n"; echo ' <td class="cl">' . "\n";
Ultimate URLs can be installed, upgraded, and removed via Plugin Manager or manually using the included installation code. One should never attempt to bypass these instructions when installing, upgrading, or removing Ultimate URLs.
There are some known bugs and issues present in Zen Cart and 3rd party modules which may impact your Zen Cart installation. Please apply any relevant patches and workarounds before installing Ultimate URLs. Additional patches and workarounds may be available in the Support Thread.
The location "/temp" in this section refers to the temporary location where the distribution archive for Ultimate URLs has been extracted.
During the normal installation process you should not do anything with these files. These files are not used by the Ultimate URLs installer and copying these files over to the server may interfere with the installation process. In most cases the installer will handle making the required modifications on your behalf during both installation and uninstallation.
This does require the web server to have write access to files and folders which are part of the Zen Cart installation. This is allowed (and configured by default) on many hosting providers (especially those utilizing suexec or suPHP for security purposes).
In the event your hosting provider does not allow granting write access to the files and folders which are part of the Zen Cart installation some additional steps may be required in order to install Ultimate URLs. These steps should only be used as a last resort.
Make sure to use the correct Modified Core Files ("/temp/modified_xxx_files") matching the version of Zen Cart in use by the store. For example if the installed version of Zen Cart is 1.5.4 only use the Modified Core Files from the "/temp/modified_154_files" folder.
Feel free to stop by the Zen Cart forums! At some point in our lives we all need some help. Make sure to read through the support thread for this module and search for answers before posting. Keep in mind Zen Cart is free software, and the forum members are volunteers. When one has a time critical project, issue(s) which cannot be duplicated, or a complex request... It may be in one's best interest to hire a professional to handle the project or address the issue(s).
Ultimate URLs is released under the General Public License (see the file named LICENSE in the distribution archive for full details).
This script is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Always backup your shop and database before making changes.