Follow us on Twitter X-Cart on Facebook Wiki
Shopping cart software Solutions for online shops and malls
 

HTML Generate Static Pages for [3.5.x]

 
Reply
   X-Cart forums > X-Cart 4 > Dev Questions
 
Thread Tools Search this Thread
  #1  
Old 08-20-2004, 10:33 PM
  B00MER's Avatar 
B00MER B00MER is offline
 

X-Guru
  
Join Date: Sep 2002
Location: Keller, TX (Cart-Lab.com)
Posts: 3,165
 

Default HTML Generate Static Pages for [3.5.x]

4.0 has a nice new feature that will generate static pages when generating the HTML catalog along with callback, etc. I decided to port the code backwards to 3.5.x, below is the code from a 3.5.2 cart, just copy and paste the code wrapped with my #-=-=-= B00MER comments.

Enjoy!

Code:
<?php /*****************************************************************************\ +-----------------------------------------------------------------------------+ | X-Cart | | Copyright (c) 2001-2003 Ruslan R. Fazliev <rrf@rrf.ru> | | All rights reserved. | +-----------------------------------------------------------------------------+ | PLEASE READ THE FULL TEXT OF SOFTWARE LICENSE AGREEMENT IN THE "COPYRIGHT" | | FILE PROVIDED WITH THIS DISTRIBUTION. THE AGREEMENT TEXT IS ALSO AVAILABLE | | AT THE FOLLOWING URL: http://www.x-cart.com/license.php | | | | THIS AGREEMENT EXPRESSES THE TERMS AND CONDITIONS ON WHICH YOU MAY USE | | THIS SOFTWARE PROGRAM AND ASSOCIATED DOCUMENTATION THAT RUSLAN R. | | FAZLIEV (hereinafter referred to as "THE AUTHOR") IS FURNISHING OR MAKING | | AVAILABLE TO YOU WITH THIS AGREEMENT (COLLECTIVELY, THE "SOFTWARE"). | | PLEASE REVIEW THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT | | CAREFULLY BEFORE INSTALLING OR USING THE SOFTWARE. BY INSTALLING, | | COPYING OR OTHERWISE USING THE SOFTWARE, YOU AND YOUR COMPANY | | (COLLECTIVELY, "YOU") ARE ACCEPTING AND AGREEING TO THE TERMS OF THIS | | LICENSE AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY THIS | | AGREEMENT, DO NOT INSTALL OR USE THE SOFTWARE. VARIOUS COPYRIGHTS AND | | OTHER INTELLECTUAL PROPERTY RIGHTS PROTECT THE SOFTWARE. THIS | | AGREEMENT IS A LICENSE AGREEMENT THAT GIVES YOU LIMITED RIGHTS TO USE | | THE SOFTWARE AND NOT AN AGREEMENT FOR SALE OR FOR TRANSFER OF TITLE.| | THE AUTHOR RETAINS ALL RIGHTS NOT EXPRESSLY GRANTED BY THIS AGREEMENT. | | | | The Initial Developer of the Original Code is Ruslan R. Fazliev | | Portions created by Ruslan R. Fazliev are Copyright (C) 2001-2003 | | Ruslan R. Fazliev. All Rights Reserved. | +-----------------------------------------------------------------------------+ \*****************************************************************************/ # $Id: html_catalog.php,v 1.27.2.2 2003/12/01 08:19:41 mclap Exp $ # This script generates search engine friendly HTML catalog for X-cart @set_time_limit(2700); require "./auth.php"; require $xcart_dir."/include/security.php"; $catalog_dir_name = "/catalog"; $cat_dir = $xcart_dir.$catalog_dir_name; $per_page = $config["Appearance"]["products_per_page"]; $max_name_length = 64; $php_scripts = array("search.php","giftcert.php","help.php", "cart.php", "product.php","register.php", "home.php", "pages.php"); $site_location = parse_url($http_location); function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } function my_save_data($filename, $data) { global $hc_state, $count; $fp = fopen($filename, "w+"); if (!$fp) { echo "<font color=red>Cannot save file: ".$filename."</font>"; x_session_save(); exit; } fwrite($fp, $data); $count++; echo "$filename \n"; func_flush(); if ($hc_state["pages_per_pass"] > 0 && $count >= $hc_state["pages_per_pass"]) { $hc_state["count"] += $count; echo "<HR>"; func_html_location("html_catalog.php?mode=continue",1); } } # # Generate filename for a category page # function category_filename($cat, $cat_name, $page = 1){ global $max_name_length; global $sql_tbl; if (empty($cat_name)) $cat_name = array_pop(func_query_first("SELECT category FROM $sql_tbl[categories] where categoryid='$cat'")); if (empty($cat_name)) $cat_name = $cat; $cat_name =preg_replace("/[ \/]/", "_", $cat_name); $cat_name = preg_replace("/[^A-Za-z0-9_]+/", "", $cat_name); $cat_name = $cat_name."_page_".$page."_c_".$cat.".html"; return $cat_name; } # # Generate filename for a product page # function product_filename($productid, $prod_name=false){ global $max_name_length, $sql_tbl; if (empty($prod_name)) $prod_name = array_pop(func_query_first("SELECT product FROM $sql_tbl[products] WHERE productid = '$productid'")); if (empty($prod_name)) $prod_name = $productid; $prod_name = substr($prod_name, 0, $max_name_length); $prod_name = preg_replace("/[ \/]/", "_", $prod_name); $prod_name = preg_replace("/[^A-Za-z0-9_]+/", "", $prod_name); $prod_name = $prod_name."_p_".$productid.".html"; return $prod_name; } # -=-=-=-=-=-=-=-=-=-=-=-= B00MER function staticpage_filename($pageid, $page_name=false) { global $config; global $max_name_length, $sql_tbl; global $hc_state; if (empty($page_name)) $page_name = array_pop(func_query_first("SELECT title FROM $sql_tbl[pages] WHERE pageid='$pageid' AND level='E'")); if (empty($page_name)) $page_name = $pageid; $page_name = substr($page_name, 0, $max_name_length); $page_name = preg_replace("/[ \/]/", "_", $page_name); $page_name = preg_replace("/[^A-Za-z0-9_]+/", "", $page_name); $page_name = $page_name."_p_".$pageid.".html"; return $page_name; } # -=-=-=-=-=-=-=-=-=-=-=-= B00MER function category_callback($found) { $cat = false; $fn = array(0,1); if (preg_match("/cat=([0-9]+)/S",$found[2], $m)) $fn[0] = $cat = $m[1]; if (preg_match("/page=([0-9]+)/S",$found[2], $m)) $fn[1] = $m[1]; return $found[1].category_filename($fn[0],false,$fn[1]).$found[3]; } function product_callback($found) { if (preg_match("/productid=([0-9]+)/S",$found[2], $m)) return $found[1].product_filename($m[1]).$found[3]; return $found[1].$found[3]; }; # -=-=-=-=-=-=-=-=-=-=-=-= B00MER function staticpage_callback($found) { if (preg_match("/pageid=([0-9]+)/S",$found[2], $m)) return $found[1].staticpage_filename($m[1]).$found[3]; return $found[1].$found[3]; }; # -=-=-=-=-=-=-=-=-=-=-=-= B00MER # # Modify hyperlinksks to point to HTML pages of the catalogue # $php_scripts_long = implode("|", $php_scripts); function process_page($page_src){ global $php_scripts_long; global $XCART_SESSION_NAME; global $site_location; # Modify links to categories $page_src = preg_replace_callback('/(<a[^<>]+href[ ]*=[ ]*["\']*)[^"\']*home.php\?(cat=[^"\'>]+)(["\'])/iS', "category_callback", $page_src); # Modify links to products $page_src = preg_replace_callback('/(<a[^<>]+href[ ]*=[ ]*["\']*)[^"\']*product.php\?(productid=[^"\'>]+)(["\'>])/iUS', "product_callback", $page_src); # -=-=-=-=-=-=-=-=-=-=-=-= B00MER # Modify links to static_pages $page_src = preg_replace_callback('/(<a[^<>]+href[ ]*=[ ]*["\']*)[^"\']*pages.php\?(pageid=[^"\'>]+)(["\'>])/iUS', "staticpage_callback", $page_src); # -=-=-=-=-=-=-=-=-=-=-=-= B00MER # Modify links to PHP scripts $page_src = preg_replace("/<a(.+)href[ ]*=[ ]*[\"']*(".$php_scripts_long.")([^\"^']*)[\"']/iUS", "<a\\1href=\"".$site_location["path"].DIR_CUSTOMER."/\\2\\3\"", $page_src); # Modify action values in HTML forms $page_src = preg_replace("/action[ ]*=[ ]*[\"']*(".$php_scripts_long.")([^\"^']*)[\"']/iUS", "action=\"".$site_location["path"].DIR_CUSTOMER."/\\1\"", $page_src); # Strip all PHP transsids if any while (preg_match("/<a(.+)href[ ]*=[ ]*[\"']*([^\"^']*)(\?".$XCART_SESSION_NAME."=|&".$XCART_SESSION_NAME."=)([^\"^']*)[\"']/iS", $page_src)) $page_src = preg_replace("/<a(.+)href[ ]*=[ ]*[\"']*([^\"^']*)(\?".$XCART_SESSION_NAME."=|&".$XCART_SESSION_NAME."=)([^\"^']*)[\"']/iS", "<a\\1href=\"\\2\"", $page_src); $page_src = preg_replace("/<input[ ]+type=\"hidden\"[ ]+name=\"".$XCART_SESSION_NAME."\"[ ]+value=\"[a-zA-z0-9]*\"[ ]*\/>/iS", "", $page_src); return $page_src; } if ($REQUEST_METHOD=="POST" && $mode=="catalog_gen" || $REQUEST_METHOD=="GET" && $mode=="continue") { include "./safe_mode.php"; echo "Generating catalog "; func_flush(); # variables initiation x_session_register("hc_state"); $count = 0; if (empty($hc_state) || $REQUEST_METHOD=="POST") { $hc_state=""; $hc_state["category_processed"] = false; $hc_state["catproducts_processed"] = false; $hc_state["last_cid"] = 0; $hc_state["last_pid"] = 0; $hc_state["cat_pages"] = 0; $hc_state["cat_page"] = 1; $hc_state["time_used"] = 0; $hc_state["count"] = 0; $hc_state["start_category"] = $start_category; $hc_state["pages_per_pass"] = $pages_per_pass; $hc_state["gen_action"] = $gen_action; $hc_state["process_subcats"] = isset($process_subcats); $hc_state["time_start"] = getmicrotime(); if ($drop_pages == "on") { echo "Deleting old catalog... "; func_flush(); $dir = opendir ($cat_dir); while ($file = readdir ($dir)) { if (($file == ".") or ($file == "..")) continue; if ((filetype ("$cat_dir/$file") != "dir")) { unlink ("$cat_dir/$file"); } } } echo "Converting pages to HTML "; func_flush(); # Dump X-cart home page to disk list($http_headers, $page_src) = func_http_get_request($site_location["host"], $site_location["path"].DIR_CUSTOMER."/home.php", ""); $page_src = process_page($page_src); my_save_data("$cat_dir/index.html", $page_src); } else { echo "Continue converting pages to HTML (".$hc_state["count"]." pages converted) "; func_flush(); } # -=-=-=-=-=-=-=-=-=-=-=-= B00MER # # Process static pages # $pages_data = db_query("SELECT pageid, title FROM $sql_tbl[pages] WHERE level='E' ORDER BY pageid"); while ($page_data = db_fetch_array($pages_data)) { list($http_headers, $page_src) = func_http_get_request($site_location["host"], $site_location["path"].DIR_CUSTOMER."/pages.php", "pageid=$page_data[pageid]"); $page_src = process_page($page_src); $page_name = staticpage_filename($page_data["pageid"], $page_data["title"]); my_save_data("$cat_dir/$page_name", $page_src); } db_free_result($pages_data); # -=-=-=-=-=-=-=-=-=-=-=-= B00MER # # Let's generate the catalog # if ($hc_state["cat_pages"] > 0 || isset($hc_state["catproducts"])) $categories_cond = "categoryid>=".$hc_state["last_cid"]; else $categories_cond = "categoryid>".$hc_state["last_cid"]; if (!empty($hc_state["start_category"])) $categories_cond .= " AND category='".$hc_state["start_category"]."' ".(@$process_subcats?" OR category LIKE '$start_category/%'":"")." "; if (!$hc_state["process_subcats"]) { if (!empty($hc_state["start_category"])) $categories_cond .= " AND category NOT LIKE '$start_category/%/%'"; else $categories_cond .= " AND category NOT LIKE '%/%'"; } $categories_data = db_query("SELECT categoryid, category FROM $sql_tbl[categories] WHERE ".$categories_cond." ORDER BY categoryid"); if ($categories_data) { while ($category_data = db_fetch_array($categories_data)) { $hc_state["last_cid"] = $category_data["categoryid"]; if ($hc_state["gen_action"] & 1 === 1 && !isset($hc_state["catproducts"])) { if ($hc_state["cat_pages"]==0 && !isset($hc_state["cat_done"])) { $product_count = array_pop(func_query_first("SELECT COUNT(*) FROM $sql_tbl[products] WHERE (categoryid=$category_data[categoryid] OR categoryid1=$category_data[categoryid] OR categoryid2=$category_data[categoryid] OR categoryid3=$category_data[categoryid] AND avail>0)")); $pages = ceil($product_count/$per_page); if ($pages == 0) $pages = 1; $first = 1; $hc_state["cat_pages"] = $pages; $hc_state["cat_done"] = false; } else { $first = $hc_state["cat_page"]+1; $pages = $hc_state["cat_pages"]; } # process pages of category if (!isset($hc_state["cat_done"]) || !@$hc_state["cat_done"]) { for ($i = $first; $i <= $pages; $i++) { list($http_headers, $page_src) = func_http_get_request($site_location["host"], $site_location["path"].DIR_CUSTOMER."/home.php", "cat=$category_data[categoryid]&page=$i"); $page_src = process_page($page_src); $page_name = category_filename($category_data["categoryid"], $category_data["category"], $i); $hc_state["cat_page"] = $i; my_save_data("$cat_dir/$page_name", $page_src); } } unset($hc_state["cat_done"]); $hc_state["cat_page"] = 1; $hc_state["cat_pages"] = 0; } # process products in category if ($hc_state["gen_action"] & 2 === 2) { $prod_cond = " AND productid>".$hc_state["last_pid"]; $products_data = db_query("SELECT productid, product FROM $sql_tbl[products] WHERE categoryid=$category_data[categoryid] $prod_cond ORDER BY productid"); if ($products_data) { $hc_state["catproducts"] = false; while($product_data = db_fetch_array($products_data)) { $hc_state["last_pid"] = $product_data["productid"]; list($http_headers, $page_src) = func_http_get_request($site_location["host"], $site_location["path"].DIR_CUSTOMER."/product.php", "productid=$product_data[productid]"); $page_src = process_page($page_src); $page_name = product_filename($product_data["productid"], $product_data["product"]); my_save_data("$cat_dir/$page_name", $page_src); } $hc_state["last_pid"] = 0; unset($hc_state["catproducts"]); } } } } $time_end = getmicrotime(); echo " HTML catalog was created successfully. "; echo "Time elapsed: ".round($time_end-$hc_state["time_start"],2)." second(s)"; x_session_unregister("hc_state"); func_html_location("html_catalog.php",30); } else { # # Grab all categories # x_session_unregister("hc_state"); $categories = func_query("SELECT * FROM $sql_tbl[categories] ORDER BY category"); # # Smarty display code goes here # $smarty->assign("cat_dir", $cat_dir); $smarty->assign("cat_url", $http_location.$catalog_dir_name."/index.html"); $smarty->assign("categories", $categories); $smarty->assign("main","html_catalog"); @include $xcart_dir."/modules/gold_display.php"; $smarty->display("admin/home.tpl"); } ?>
__________________
Cart-Lab - 100+ Social Bookmarks for X-Cart.
Reply With Quote
  #2  
Old 08-23-2004, 05:54 PM
 
POSDepot POSDepot is offline
 

Advanced Member
  
Join Date: Sep 2002
Posts: 52
 

Default

Thanks Boomer!!

This is exactly what I needed.

Now all my static "content" pages are easily spiderable.

Randy
__________________
X-Cart Gold
4.1.9
Reply With Quote
  #3  
Old 10-10-2004, 09:14 PM
 
wallachee wallachee is offline
 

Senior Member
  
Join Date: Feb 2003
Posts: 102
 

Default

This mod doesn't work in 3.5.10...it gives this error:

Parse error: parse error, unexpected T_STRING in .../html_catalog.php on line 113

Any ideas?
__________________
Version 4.1.9
Reply With Quote
  #4  
Old 10-12-2004, 12:31 PM
  B00MER's Avatar 
B00MER B00MER is offline
 

X-Guru
  
Join Date: Sep 2002
Location: Keller, TX (Cart-Lab.com)
Posts: 3,165
 

Default

Look at line 113 and paste the code, more than likely your missing a quote " or ending semi-colon ;
__________________
Cart-Lab - 100+ Social Bookmarks for X-Cart.
Reply With Quote
  #5  
Old 10-12-2004, 02:52 PM
 
wallachee wallachee is offline
 

Senior Member
  
Join Date: Feb 2003
Posts: 102
 

Default

Copying and pasting the code above directly into 3.5.10 gives the following:

Parse error: parse error, unexpected T_STRING in html_catalog.php on line 50

Pasting just the bits of the mod code give parse errors on other lines...I've checked the " and ;, and everything is correct. The thing is it doesn't work when I directly copy it over.

Any help is appreciated.

Thanks,
Bradley
__________________
Version 4.1.9
Reply With Quote
  #6  
Old 10-12-2004, 03:29 PM
 
wallachee wallachee is offline
 

Senior Member
  
Join Date: Feb 2003
Posts: 102
 

Default

Ignore that last post. The problem was white space causing the Parse error. The mod works great B00MER! If only you could do this with the RMA module for 4.0

Thanks,
Bradley
__________________
Version 4.1.9
Reply With Quote
  #7  
Old 11-16-2004, 10:28 AM
  Jon's Avatar 
Jon Jon is offline
 

X-Guru
  
Join Date: Oct 2002
Location: Vancouver, Canada
Posts: 4,200
 

Default

What exactly does this do?
Reply With Quote
  #8  
Old 11-16-2004, 10:31 AM
  B00MER's Avatar 
B00MER B00MER is offline
 

X-Guru
  
Join Date: Sep 2002
Location: Keller, TX (Cart-Lab.com)
Posts: 3,165
 

Default

4.0 parses static pages into html when generating the html catalog, so I kinda ported the code to 3.5.x so it would work on older versions to help with search engine indexing. Wasn't ever fully done though.
__________________
Cart-Lab - 100+ Social Bookmarks for X-Cart.
Reply With Quote
Reply
   X-Cart forums > X-Cart 4 > Dev Questions



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -8. The time now is 09:16 AM.

   

 
X-Cart forums © 2001-2020