Hjælp til php.
Hej til alle,Jeg har et stort problem i forbindelse med seo url. Jeg prøvede en lang tid at ændre denne kode, men uden held.
Jeg ønsker at ændre www.minhobby.dk/page/8/hobby.html
For eksempel www.minhobby.dk/hobby.html
Her bemærkede jeg nummer 8 er en sekvens i SQL-database: SQL-database betyder, at der under id "side"
Så jeg forsøgte at ændre denne linje:
/ / Brug SEO optimeret link
echo "<a class = 'main_menu_link' href = 'sider /'. menu_links $ [0] [$ menu_link_ind] ['id']."/".$ menu_links [0] [$ menu_link_ind] [' page_key '].". html ">" camel_case ($ menu_links [0] [$ menu_link_ind] ['menu_link'], $ lang )."</ a> </ li>. "
) Else (
echo "<li> <a class='main_menu_link' href='index.php?page=pages&pid=".$menu_links[0][$menu_link_ind]['id']."'>. camel_case ($ menu_links [ 0] [$ menu_link_ind] ['menu_link'], $ lang )."</ a> </ li> ";
-------------------------------------------------- -------------------------
I denne måde, jeg forsøgte at ændre ['id'] til "page_key"
Men intet af dette så det viser fejl.
.................................................. .................................................. ..............
Er der nogen du kan hjælpe mig til at ændre denne kode?
<?php
class Menu {
private $id;
protected $menu;
protected $languageId;
protected $whereClause;
public $langIdByUrl;
public $error;
//==========================================================================
// Class Constructor
//==========================================================================
function __construct($id = "") {
$this->id = $id;
$this->languageId = (isset($_REQUEST['language_id']) && $_REQUEST['language_id'] != "") ? $_REQUEST['language_id'] : Languages::GetDefaultLang();
$this->whereClause = "";
$this->whereClause .= ($this->languageId != "") ? " AND language_id = '".$this->languageId."'" : "";
$this->langIdByUrl = ($this->languageId != "") ? "&language_id=".$this->languageId : "";
if($this->id!=""){
$sql = "SELECT
".DB_PREFIX."menus.*,
".DB_PREFIX."languages.lang_name as language_name
FROM ".DB_PREFIX."menus
LEFT OUTER JOIN ".DB_PREFIX."languages ON ".DB_PREFIX."menus.language_id = ".DB_PREFIX."languages.abbreviation
WHERE ".DB_PREFIX."menus.id = '".intval($this->id)."'";
$this->menu = database_query($sql, DATA_ONLY, FIRST_ROW_ONLY);
}else{
$this->menu['menu_name'] = "";
$this->menu['menu_placement'] = "";
$this->menu['menu_order'] = "";
$this->menu['language_id'] = "";
$this->menu['language_name'] = "";
}
}
//==========================================================================
// Class Destructor
//==========================================================================
function __destruct(){
// echo 'this object has been destroyed';
}
/***
* Get menu name
*
**/
public function GetName(){
if(isset($this->menu['menu_name'])) return $this->GetDataDecoded($this->menu['menu_name']);
else return "";
}
/***
* Get parameter
*
**/
public function GetParameter($param = ""){
if(isset($this->menu[$param])){
return $this->menu[$param];
}else{
return "";
}
}
/***
* Get menu ID
*
**/
public function GetId(){
return $this->id;
}
/***
* Get menu order
*
**/
public function GetOrder(){
if(isset($this->menu['menu_order'])) return $this->menu['menu_order'];
else return "";
}
/***
* Get all top menus array
*
**/
function GetAllTop($where_clause = "", $lang_id = ""){
if($lang_id != "") $where_clause .= "AND ".DB_PREFIX."pages.language_id = '".$lang_id."' ";
// Get all top menus
$sql = "SELECT ".DB_PREFIX."pages.*
FROM ".DB_PREFIX."pages
INNER JOIN ".DB_PREFIX."menus ON ".DB_PREFIX."pages.menu_id = ".DB_PREFIX."menus.id
WHERE ".DB_PREFIX."menus.menu_placement = 'top' AND
is_published = 1
".$where_clause;
return database_query($sql, DATA_AND_ROWS);
}
/***
* Get all footer menus array
*
**/
function GetAllFooter($where_clause = "", $lang_id = ""){
if($lang_id != "") $where_clause .= "AND ".DB_PREFIX."pages.language_id = '".$lang_id."' ";
// Get all top menus
$sql = "SELECT ".DB_PREFIX."pages.*
FROM ".DB_PREFIX."pages
INNER JOIN ".DB_PREFIX."menus ON ".DB_PREFIX."pages.menu_id = ".DB_PREFIX."menus.id
WHERE ".DB_PREFIX."menus.menu_placement = 'bottom' AND
is_published = 1
".$where_clause;
return database_query($sql, DATA_AND_ROWS);
}
/***
* Get all left menus array
*
**/
function GetMenus($lang_id = "", $position = "left"){
// Get all left menus
$sql = "SELECT
".DB_PREFIX."menus.*
FROM ".DB_PREFIX."menus
INNER JOIN ".DB_PREFIX."languages ON ".DB_PREFIX."menus.language_id = ".DB_PREFIX."languages.abbreviation
WHERE
".DB_PREFIX."menus.language_id = '".$lang_id."' AND
".DB_PREFIX."menus.menu_placement = '".$position."'
ORDER BY ".DB_PREFIX."menus.menu_order ASC ";
return database_query($sql, DATA_AND_ROWS);
}
/***
* Get all left menu links array
*
**/
function GetMenuLinks($menu_id, $lang_id = "", $position = "left"){
// Get all left menus
$sql = "SELECT
".DB_PREFIX."pages.*
FROM ".DB_PREFIX."pages
INNER JOIN ".DB_PREFIX."languages ON ".DB_PREFIX."pages.language_id = ".DB_PREFIX."languages.abbreviation
INNER JOIN ".DB_PREFIX."menus ON ".DB_PREFIX."pages.menu_id = ".DB_PREFIX."menus.id
WHERE
".DB_PREFIX."pages.language_id = '".$lang_id."' AND
".DB_PREFIX."menus.menu_placement = '".$position."' AND
".DB_PREFIX."pages.menu_id = '".$menu_id."' AND
".DB_PREFIX."pages.is_home = 0 AND
".DB_PREFIX."pages.is_published = 1
ORDER BY ".DB_PREFIX."pages.id ASC ";
return database_query($sql, DATA_AND_ROWS);
}
/***
* Get all menus array
* @param $order - order clause
* @param $join_table - join tables
**/
function GetAll($order = " menu_order ASC", $join_table = "", $menu_placement = "", $lang_id = "") {
$where_clause = "";
if($menu_placement != ""){
$where_clause .= "AND ".DB_PREFIX."menus.menu_placement = '".$menu_placement."' ";
}
if($lang_id != "") $where_clause .= "AND ".DB_PREFIX.$join_table.".language_id = '".$lang_id."' ";
// Build ORDER BY CLAUSE
if($order=="")$order_clause = "";
else $order_clause = "ORDER BY $order";
// Build JOIN clause
if($join_table == "") {
$join_clause = "";
$join_select_fields = "";
}else if($join_table != "menus") {
$join_clause = "LEFT OUTER JOIN ".DB_PREFIX.$join_table." ON ".DB_PREFIX.$join_table.".menu_id=".DB_PREFIX."menus.id ";
$join_select_fields = ", ".DB_PREFIX.$join_table.".* ";
} else {
$join_clause = "";
$join_select_fields = "";
}
$sql = "SELECT
".DB_PREFIX."menus.*,
".DB_PREFIX."languages.lang_name as language_name
$join_select_fields
FROM ".DB_PREFIX."menus
INNER JOIN ".DB_PREFIX."languages ON ".DB_PREFIX."menus.language_id = ".DB_PREFIX."languages.abbreviation
$join_clause
WHERE 1=1
$where_clause
$order_clause";
return database_query($sql, DATA_AND_ROWS, ALL_ROWS, FETCH_ASSOC);
}
/***
* Update menu
* @param $param - array of parameters
**/
function MenuUpdate($params = array()) {
// Block operation in demo mode
if(strtolower(SITE_MODE) == "demo"){
$this->error = _OPERATION_BLOCKED;
return false;
}
if(isset($this->id)){
// Get input parameters
if(isset($params['name']) && $params['name']!=""){
$this->menu['menu_name'] = $params['name'];
}else{
$this->error = _MENU_NAME_EMPTY;
return false;
}
if(isset($params['order'])) $this->menu['menu_order'] = $params['order'];
if(isset($params['language_id'])) $this->menu['language_id'] = $params['language_id'];
if(isset($params['menu_placement'])) $this->menu['menu_placement'] = $params['menu_placement'];
$sql = "SELECT MIN(menu_order) as min_order, MAX(menu_order) as max_order FROM ".DB_PREFIX."menus";
if($menu = database_query($sql, DATA_ONLY, FIRST_ROW_ONLY)){
$min_order = $menu['min_order'];
$max_order = $menu['max_order'];
// insert menu with new order priority in menus list
$sql = "SELECT menu_order FROM ".DB_PREFIX."menus WHERE id = ".(int)$this->id;
if($menu = database_query($sql, DATA_ONLY, FIRST_ROW_ONLY)){
$sql_down = "UPDATE ".DB_PREFIX."menus SET menu_order = menu_order - 1 WHERE language_id = '".$this->menu['language_id']."' AND id <> ".(int)$this->id." AND menu_order <= ".$this->menu['menu_order']." AND menu_order > ".$menu['menu_order'];
$sql_up = "UPDATE ".DB_PREFIX."menus SET menu_order = menu_order + 1 WHERE language_id = '".$this->menu['language_id']."' AND id <> ".(int)$this->id." AND menu_order >= ".$this->menu['menu_order']." AND menu_order < ".$menu['menu_order'];
if($menu['menu_order'] != $this->menu['menu_order']){
$sql = "UPDATE ".DB_PREFIX."menus
SET
language_id = '".$this->menu['language_id']."',
menu_name = '".$this->GetDataEncoded($this->menu['menu_name'])."',
menu_placement = '".$this->menu['menu_placement']."',
menu_order = ".$this->menu['menu_order']."
WHERE id = ".(int)$this->id." AND menu_order <> ".$this->menu['menu_order'];
if($result = database_void_query($sql)){
if($this->menu['menu_order'] == $min_order){
$sql = $sql_up;
}else if($this->menu['menu_order'] == $max_order){
$sql = $sql_down;
}else{
if($menu['menu_order'] < $this->menu['menu_order']) $sql = $sql_down;
else $sql = $sql_up;
}
$result = database_void_query($sql);
}
}else{
$sql = "UPDATE ".DB_PREFIX."menus
SET
language_id = '".$this->menu['language_id']."',
menu_name = '".$this->GetDataEncoded($this->menu['menu_name'])."',
menu_placement = '".$this->menu['menu_placement']."'
WHERE id = ".(int)$this->id;
$result = database_void_query($sql);
}
}
}
if($result >= 0){
return true;
}else{
$this->error = _TRY_LATER;
return false;
}
}else{
$this->error = _MENU_MISSED;
return false;
}
}
/***
* Create new menu
* @param $param - array of parameters
**/
function MenuCreate($params = array()) {
// Block operation in demo mode
if(strtolower(SITE_MODE) == "demo"){
$this->error = _OPERATION_BLOCKED;
return false;
}
// Get input parameters
if(isset($params['name'])) $this->menu['menu_name'] = $params['name'];
if(isset($params['menu_placement'])) $this->menu['menu_placement'] = $params['menu_placement'];
if(isset($params['order'])) $this->menu['menu_order'] = $params['order'];
if(isset($params['language_id'])) $this->menu['language_id'] = $params['language_id'];
// Prevent creating of empty records in our 'menus' table
if($this->menu['menu_name']!=""){
$menu_code = strtoupper(random_string(10));
$total_languages = Languages::GetAll();
for($i = 0; $i < $total_languages[1]; $i++){
$m = Menu::GetAll(" menu_order ASC", "menus", "", $total_languages[0][$i]['abbreviation']);
$max_order = (int)($m[1]+1);
$sql = "INSERT INTO ".DB_PREFIX."menus (language_id, menu_code, menu_name, menu_placement, menu_order)
VALUES('".$total_languages[0][$i]['abbreviation']."', '".$menu_code."', '".$this->GetDataEncoded($this->menu['menu_name'])."', '".$this->menu['menu_placement']."', ".$max_order.")";
if(!database_void_query($sql)){
$this->error = _TRY_LATER;
return false;
}
//else{
//$this->menu['language_id'] = $params['language_id'] = $total_languages[0][$i]['abbreviation'];
//$sql = "SELECT * FROM ".DB_PREFIX."menus WHERE menu_order = ".$max_order;
//if($menu = database_query($sql, DATA_ONLY, FIRST_ROW_ONLY)){
//$this->id = $menu['id'];
//$this->MenuUpdate($params);
//print_r($params);
//}
//}
}
return true;
}else{
$this->error = _MENU_NAME_EMPTY;
return false;
}
}
/***
* Delete menu
* @param $menu_id - menu ID
**/
function MenuDelete($menu_id = "0", $menu_order = "0") {
// Block operation in demo mode
if(strtolower(SITE_MODE) == "demo"){
$this->error = _OPERATION_BLOCKED;
return false;
}
$sql = "DELETE FROM ".DB_PREFIX."menus WHERE id = ".(int)$menu_id."";
if(database_void_query($sql)){
$sql = "UPDATE ".DB_PREFIX."menus SET menu_order = menu_order - 1 WHERE menu_order > ".(int)$menu_order."";
if(database_void_query($sql)){
return true;
}
}
return false;
}
/***
* Move menu (change priority order)
* @param $menu_id
* @param $dir - direction
* @param $menu_order - menu order
**/
function MenuMove($menu_id, $dir = "", $menu_order = "") {
// Block operation in demo mode
if(strtolower(SITE_MODE) == "demo"){
$this->error = _OPERATION_BLOCKED;
return false;
}
if(($dir == "") || ($menu_order == "")) return false;
$sql = "SELECT * FROM ".DB_PREFIX."menus
WHERE
id <> '".(int)$menu_id."' AND
menu_order ".(($dir == "up") ? "<" : ">")." ".(int)$menu_order." AND
language_id = '".$this->languageId."'
ORDER BY menu_order ".(($dir == "up") ? "DESC" : "ASC");
if($menu = database_query($sql, DATA_ONLY, FIRST_ROW_ONLY)){
$sql = "UPDATE ".DB_PREFIX."menus SET menu_order = '".$menu_order."' WHERE id = ".(int)$menu['id']."";
if(database_void_query($sql)){
$sql = "UPDATE ".DB_PREFIX."menus SET menu_order = '".$menu['menu_order']."' WHERE id = ".(int)$menu_id."";
if(!database_void_query($sql)){
$this->error = _TRY_LATER;
return false;
}
}else{
$this->error = _TRY_LATER;
return false;
}
}
return true;
}
/***
* Draw all menus in dropdowm box
* @param $menu_id
**/
function DrawMenuSelectBox($menu_id = "", $language_id = "") {
echo "<select name='menu_id' id='menu_id'>";
echo "<option value=''>-- "._SELECT." --</option>";
$all_menus = self::GetAll(" menu_order ASC", "menus", "", $language_id);
for($i = 0; $i < $all_menus[1]; $i++){
echo "<option value='".$all_menus[0][$i]['id']."'";
echo ($all_menus[0][$i]['id'] == $menu_id) ? " selected " : "";
echo ">".$all_menus[0][$i]['menu_name']."</option>";
}
echo "</select>";
}
/***
* Draw pages type dropdowm box
* @param $menu_id
**/
static function DrawContentTypeBox($content_type = "") {
echo "<select name='content_type' onchange=\"ContentType_OnChange(this.value);\" >";
echo "<option value='article' ".(($content_type == "article") ? " selected " : "").">"._ARTICLE."</option>";
echo "<option value='link' ".(($content_type == "link") ? " selected " : "").">"._LINK."</option>";
echo "</select>";
}
/***
* Draw menus placement in dropdowm box
* @param $menu_id
**/
static function DrawMenuPlacementBox($menu_placement = "") {
echo "<select name='menu_placement'>";
echo "<option value='left' ".(($menu_placement == "left") ? " selected " : "").">"._LEFT."</option>";
echo "<option value='top' ".(($menu_placement == "top") ? " selected " : "").">"._TOP."</option>";
echo "<option value='right' ".(($menu_placement == "right") ? " selected " : "").">"._RIGHT."</option>";
echo "<option value='bottom' ".(($menu_placement == "bottom") ? " selected " : "").">"._BOTTOM."</option>";
echo "</select>";
}
/***
* Draw all menus as a tree (for left menu)
* @param $is_logged_in
**/
function DrawTopMenu($is_logged_in = false) {
// If not logged in - draw menu
global $objSettings;
if(!$is_logged_in){
echo "<LI><A href='index.php'>"._HOME."</A></LI>";
if(Modules::IsModuleInstalled("users")){
echo "<LI><A href='index.php?user=my_account'>"._MY_ACCOUNT."</A></LI>";
}
if(Modules::IsModuleInstalled("shopping_cart")){
$objCartSettings = new ModulesSettings("shopping_cart");
if($objCartSettings->GetModuleSettings("is_active") == "yes"){
echo "<LI><A href='index.php?page=shopping_cart'>"._SHOPPING_CART."</A></LI>";
echo "<LI><A href='index.php?page=checkout'>"._CHECKOUT."</A></LI>";
}
}
$lang = (isset($_SESSION['lang'])) ? $_SESSION['lang'] : Languages::GetDefaultLang();
$menus = self::GetAllTop("", $lang);
for($menu_ind = 0; $menu_ind < $menus[1]; $menu_ind++) {
// Draw current menu link
if($objSettings->GetParameter("seo_urls") == "1"){
// Use SEO optimized link
echo "<LI><a href='pages/".$menus[0][$menu_ind]['id']."/".$menus[0][$menu_ind]['page_key'].".html'>".camel_case($menus[0][$menu_ind]['menu_link'], $lang)."</a></LI>";
}else{
echo "<LI><a href='index.php?page=pages&pid=".$menus[0][$menu_ind]['id']."'>".camel_case($menus[0][$menu_ind]['menu_link'], $lang)."</a></LI>";
}
}
}else{
echo "<LI><A href='index.php?admin=home'>"._HOME."</A></LI>";
}
}
/***
* Draw all menus for footer
* @param $is_logged_in
**/
function DrawFooterMenu($is_logged_in = false) {
// If not logged in - draw menu
global $objSettings;
if(!$is_logged_in){
echo "<A href='index.php'>"._HOME."</A>";
if(Modules::IsModuleInstalled("users")){
echo " : <A href='index.php?user=my_account'>"._MY_ACCOUNT."</A>";
}
if(Modules::IsModuleInstalled("shopping_cart")){
$objCartSettings = new ModulesSettings("shopping_cart");
if($objCartSettings->GetModuleSettings("is_active") == "yes"){
echo " : <A href='index.php?page=shopping_cart'>"._SHOPPING_CART."</A>";
echo " : <A href='index.php?page=checkout'>"._CHECKOUT."</A>";
}
}
$lang = (isset($_SESSION['lang'])) ? $_SESSION['lang'] : Languages::GetDefaultLang();
$menus = self::GetAllFooter("", $lang);
for($menu_ind = 0; $menu_ind < $menus[1]; $menu_ind++) {
// Draw current menu link
if($objSettings->GetParameter("seo_urls") == "1"){
// Use SEO optimized link
echo "<a href='pages/".$menus[0][$menu_ind]['id']."/".$menus[0][$menu_ind]['page_key'].".html'>".camel_case($menus[0][$menu_ind]['menu_link'], $lang)."</a> : ";
}else{
echo "<a href='index.php?page=pages&pid=".$menus[0][$menu_ind]['id']."'>".camel_case($menus[0][$menu_ind]['menu_link'], $lang)."</a> : ";
}
}
}else{
echo "<A href='index.php?admin=home'>"._HOME."</A>";
}
}
/***
* Draw all menus as a tree (for left menu)
* @param $is_logged_in
**/
function DrawMenu($menu_position = "left", $logged_type = false) {
global $objSettings, $lang;
// If not user exit
if($logged_type != "" && $logged_type != "user"){
return false;
}
// Get all menus which have items (links to pages)
$lang = ($lang != "") ? $lang : Languages::GetDefaultLang();
$menus = self::GetMenus($lang, $menu_position);
$text_align = ($objSettings->GetDirection() == "ltr") ? "text-align: left;" : "text-align: right; padding-right:15px;";
$shopping_cart_allowed = false;
if(Modules::IsModuleInstalled("shopping_cart")){
$objCartSettings = new ModulesSettings("shopping_cart");
if($objCartSettings->GetModuleSettings("is_active") == "yes"){
$shopping_cart_allowed = true;
}
}
// Draw Categories block
if($shopping_cart_allowed){
Categories::DrawSideBlock();
}
// Display all menu titles (names) according to their order
$cur_menu = "";
for($menu_ind = 0; $menu_ind < $menus[1]; $menu_ind++) {
// Start draw new menu
draw_block_top(camel_case($menus[0][$menu_ind]['menu_name'], $lang));
$menu_links = self::GetMenuLinks($menus[0][$menu_ind]['id'], $lang, $menu_position);
if($menu_links[1] > 0) echo "<ul>";
for($menu_link_ind = 0; $menu_link_ind < $menu_links[1]; $menu_link_ind++) {
if($menu_links[0][$menu_link_ind]['content_type'] == "link"){
echo "<li><a target='".$menu_links[0][$menu_link_ind]['link_target']."' class='main_menu_link' href='".$menu_links[0][$menu_link_ind]['link_url']."'>".camel_case($menu_links[0][$menu_link_ind]['menu_link'], $lang)."</a></li>";
}else{
// Draw current menu link
if($objSettings->GetParameter("seo_urls") == "1"){
// Use SEO optimized link
echo "<li><a class='main_menu_link' href='pages/".$menu_links[0][$menu_link_ind]['id']."/".$menu_links[0][$menu_link_ind]['page_key'].".html'>".camel_case($menu_links[0][$menu_link_ind]['menu_link'], $lang)."</a></li>";
}else{
echo "<li><a class='main_menu_link' href='index.php?page=pages&pid=".$menu_links[0][$menu_link_ind]['id']."'>".camel_case($menu_links[0][$menu_link_ind]['menu_link'], $lang)."</a></li>";
}
}
}
if($menu_links[1] > 0) echo "</ul>";
draw_block_bottom();
}
if($logged_type == ""){
if(Modules::IsModuleInstalled("users")){
$objUsers = new Users();
$objUsers->DrawLoginFormBlock();
}
if(Modules::IsModuleInstalled("news")){
$objNews = new News();
$objNews->DrawNewsBlock();
}
if($shopping_cart_allowed){
draw_block_top(_PAYMENTS);
echo "<img src='images/ppc_icons/logo_paypal.gif' border='0' title='PayPal' alt='PayPal' />
<img src='images/ppc_icons/logo_ccVisa.gif' border='0' title='Visa' alt='Visa' />
<img src='images/ppc_icons/logo_ccMC.gif' border='0' title='MasterCard' alt='MasterCard' />
<img src='images/ppc_icons/logo_ccAmex.gif' border='0' title='Amex' alt='Amex' />";
draw_block_bottom();
}
draw_block_footer();
}
}
/***
* Return encoded data
* @param $string
**/
private function GetDataEncoded($string = ""){
return $string;
}
/***
* Return decoded data
* @param $string
**/
private function GetDataDecoded($string = ""){
$string = str_replace('\\\\', "\\", $string); // double quotation mark
$string = str_replace('\"', """, $string); // double quotation mark
$string = str_replace("\'", "'", $string); // single quotation mark
$string = str_replace('"', """, $string); // double quotation mark
$string = str_replace("'", "'", $string); // single quotation mark
return $string;
}
}
?>
----------------------------------------------------------------
HTACCESS-fil
RewriteRule ^pages/([0-9]+)/(.*?).html$ index.php?page=pages&pid=$1
RewriteRule ^pages/([0-9]+)/(.*?).html?preview([0-9]+)$ index.php?page=pages&pid=$1&preview=$3
RewriteRule ^pages/([0-9]+)/(.*?).html?(.*?) index.php?page=pages&pid=$1&$3