Back to top

Autore Topic: SEF virtuemart, router.php  (Letto 8715 volte)

Offline omit

  • Esploratore
  • **
  • Post: 61
  • Sesso: Maschio
    • Mostra profilo
SEF virtuemart, router.php
« il: 22 Dic 2010, 08:36:09 »
Buongiorno a tutti,
pubblico per chi ne avesse bisogno il file router.php da inserire nella cartella di vituemart per il corretto funzionamento delle SEF dello stesso componente. Visto che molti componenti che aiutano ad ottimizzare le sef di virtuemart sono a pagamento, dopo qualche ricerca sono arrivato ad utilizzare e modificare questo file per i miei scopi. spero possa essere utile

Codice: [Seleziona]
<?php

defined
'_JEXEC' ) or die( 'Restricted access' );

define('PAGE_SHOP_BROWSE','category');
define('PAGE_SHOP_FEED','feed');
define('PAGE_PRODUCT_DETAILS','details');
define('PAGE_PRODUCT_ENQUIRY','enquiry');
define('PAGE_CHECKOUT_INDEX','checkout');
define('PAGE_ADVANCE_SEARCH','search');
//define('VMSEFDEBUG',true);

function virtuemartBuildRoute(&$query)
{
global $VM_SEF_LANG;
$page '';
$segments = array();

/*
$myFile = "./debug_virtuemartBuildRoute.txt";
$fh = fopen($myFile, 'w') ;
$stringData = "Qui\n";
fwrite($fh, $stringData);
fclose($fh);
*/


if(isset($query['page'])){
$page $query['page'];
unset($query['page']);
}

if(isset($query['flypage'])){
unset($query['flypage']);
}

if(isset($query['product_id']))
{
if(isset($query['category_id'])==false)
$query['category_id']=get_category_id_by_product_id($query['product_id']);
}

switch ($page) {

/* Case for shop browse/catgory page */
case 'shop.browse';
$allProductsList=true;
if(isset($query['manufacturer_id']))
{
if($query['manufacturer_id'])
{
$manufacturer_id=$query['manufacturer_id'];
$manufacturer_alias getmanufacturerTitle($manufacturer_id);
$segments[] = $manufacturer_alias;
unset($query['manufacturer_id']);
$allProductsList=false;
}
}
elseif(isset($query['category_id']))
{
if($query['category_id'])
{
$category_id=$query['category_id'];
$category_alias getCategoryTitle($category_id);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];
unset($query['category_id']);
$allProductsList=false;
}
}

if($allProductsList==true)
$segments[] =convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_BROWSE_ALL_PRODUCTS_IN_SHOP'));//"products";
if(isset($query['category']))
unset($query['category']);
if(isset($query['category_id']))
unset($query['category_id']);
break;
/*End shop browse/catgory page*/

/* Case for product details page */
case 'shop.product_details':
$product_id_exists false;
$product_id $query['product_id'];

if(isset($query['category_id']))
$category_id=$query['category_id'];
if(!$category_id)
$category_id=get_category_id_by_product_id($product_id);

$category_alias getCategoryTitle($category_id);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];


$segments[]=getProductTitle($product_id,$category_id);


if(isset($query['manufacturer_id']))
unset($query['manufacturer_id']);
if(isset($query['category_id']))
unset($query['category_id']);
if(isset($query['product_id']))
unset($query['product_id']);
if(isset($query['pop']))
unset($query['pop']);

break;
/*-------End manufacture/category/productname---------*/
case 'shop.registration';
$segments[] =convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CREATE_AN_ACCOUNT'));//"user-registration";
break;

case 'shop.cart';
$segments[] =convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CART'));//"cart";
if(isset($query['product_id']))
unset($query['product_id']);

if(isset($query['category_id']))
unset($query['category_id']);
break;
case 'store.index';
$segments[] =convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_SHOP_ADMINISTRATION')); // 'administration';
if(isset($query['pshop_mode']))
unset($query['pshop_mode']);
break;
case 'shop.search';
$segments[] =convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ADVANCED_SEARCH')); // 'PAGE_ADVANCE_SEARCH';
break;
/*Case for ASK A QUESTION ABOUT THIS PRODUCT PAGE*/
case 'shop.ask';
$segments[] =convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ASK_QUESTION_ABOUT_THIS_PRODUCT'));


$product_id $query['product_id'];
if(isset($query['category_id']))
$category_id=$query['category_id'];
if(!$category_id)
$category_id=get_category_id_by_product_id($product_id);
$category_alias getCategoryTitle($category_id);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];

$segments[] = getProductTitle($product_id,$category_id);

if(isset($query['category_id']))
unset($query['category_id']);
if(isset($query['product_id']))
unset($query['product_id']);

break;
/*End*/
/*
Checkout Index page
*/

case 'checkout.index';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT')); 
if(isset($query['ssl_redirect']))
{
$segments[] = "ssl_redirect";
unset($query['ssl_redirect']);
}
if(isset($query['redirected']))
{
$segments[] = "redirected";
unset($query['redirected']);
}
break;
/** End of checkout index page */
case 'account.billing';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT_BILLING_INFORMATION')); 
if(isset($query['next_page']) ) {
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT')); 
unset($query['next_page']);
}
break;
case 'account.shipto';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT_SHIPPING_INFORMATION')); 
if(isset($query['next_page']) ) {
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT')); 
unset($query['next_page']);
}
if(isset($query['user_info_id']) ) {
$segments[] =$query['user_info_id'];
unset($query['user_info_id']);
}
break;
case 'shop.tos';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_TERMS_OF_SERVICE')); 
break;
case 'account.index':
case 'account.all':
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ACCOUNT_MAINTENANCE')); 
if(isset($query['show_page']))
{
if($query['show_page']=='account.order_details')
{
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ACCOUNT_MAINTENANCE_ORDER_DETAILS')); 
if(isset($query['order_id']))
$segments[] =$query['order_id'];
unset($query['order_id']);
}
unset($query['show_page']);
}
break;
/* Case for shop rss feed page */
case 'shop.feed';

$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_FEED'));

if(isset($query['category_id'])){
$category_alias getCategoryTitle($query['category_id']);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];

unset($query['category_id']);
}
break;
/*End shop browse/catgory page*/
case 'account.shipping';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_ACCOUNT_SHIPPING'));
if(isset($query['next_page']) ) {
$segments[] = "checkout";
unset($query['next_page']);
}
break;
case 'shop.recommend';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_RECOMMEND'));

if(isset($query['product_id']) ){
$product_id $query['product_id'];
if(isset($query['category_id']))
$category_id=$query['category_id'];
if(!$category_id)
$category_id=get_category_id_by_product_id($product_id);
$category_alias getCategoryTitle($category_id);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];

$segments[] = getProductTitle($product_id,$category_id);
unset($query['product_id']);
}
if(isset($query['tmpl']) )
unset($query['tmpl']);
if(isset($query['pop']) )
unset($query['pop']);
if(isset($query['category_id']) )
unset($query['category_id']);

break;
case 'account.order_details';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_ORDER_DETAILS'));
if(isset($query['order_id'])) {
$segments[] = $query['order_id'];
unset($query['order_id']);
}
break;
case 'shop.waiting_list';
$segments[] = convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_NOTIFY'));
if(isset($query['product_id']) ){
$product_id $query['product_id'];
if(isset($query['category_id']))
$category_id=$query['category_id'];
if(!$category_id)
$category_id=get_category_id_by_product_id($product_id);
$category_alias getCategoryTitle($category_id);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];

$segments[] = getProductTitle($product_id,$category_id);
unset($query['product_id']);
}
if(isset($query['category_id']))
unset($query['category_id']);
break;
case 'shop.manufacturer_page':
$segments[]=convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_MANUFACTURER'));
if(isset($query['manufacturer_id']))
{
$manufacturer_id $query['manufacturer_id'];
$manufacturer_alias getmanufacturerTitle($manufacturer_id);
$segments[] = $manufacturer_alias;
unset($query['manufacturer_id']);
}
if(isset($query['output']))
unset($query['output']);
break;
case 'shop.infopage':
$segments[]=convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VENDOR'));
if(isset($query['vendor_id']))
{
$segments[] =getVendorTitle($query['vendor_id']);
unset($query['vendor_id']);
}
if(isset($query['output']))
unset($query['output']);
break;
case 'shop.pdf_output':
$segments[]=convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_PDF'));
$product_id 0;
if(isset($query['product_id']) )
$product_id $query['product_id'];

if(isset($query['category_id']))
$category_id=$query['category_id'];
if(!$category_id)
$category_id=get_category_id_by_product_id($product_id);
$category_alias getCategoryTitle($category_id);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];

if($product_id)
$segments[] = getProductTitle($product_id,$category_id);

if(isset($query['category_id']))
unset($query['category_id']);
if(isset($query['product_id']))
unset($query['product_id']);
if(isset($query['output']))
unset($query['output']);
if(isset($query['pop']))
unset($query['pop']);
if(isset($query['showpage']))
unset($query['showpage']);

break;
case '':
if(isset($query['pop']) AND isset($query['tmpl']))
{
$segments[]=convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_PRINT'));

$product_id JRequest::getInt('product_id');
$category_id=JRequest::getInt('category_id');
if(!$category_id)
$category_id=get_category_id_by_product_id($product_id);
$category_alias getCategoryTitle($category_id);
for($i=0;$i<count($category_alias);$i++)
$segments[] = $category_alias[$i];
if($product_id)
$segments[] = getProductTitle($product_id,$category_id);

unset($query['pop']);
unset($query['tmpl']);
}
break;
}
if(isset($query['limit']))
{
$segments[] = 'limit,' $query['limit'];
unset($query['limit']);
}
if(isset($query['start']) OR isset($query['limitstart']))
{
$segments[] ='limitstart,'.(isset($query['start'])?$query['start']:(isset($query['limitstart'])?$query['limitstart']:0));
if(isset($query['start']))
unset($query['start']);
if(isset($query['limitstart']))
unset($query['limitstart']);
}
$newSegments=array();
foreach($segments as $segment)
{
$newSegments[]=urlencode($segment);
}
return $newSegments;
}
/*End of the function*/



function virtuemartParseRoute($segments)
{
global $VM_SEF_LANG;

/*
$myFile = "./debug_virtuemartParseRoute.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = "Qui\n";
fwrite($fh, $stringData);
fclose($fh);
*/


$vars = array();
$firstSegment convert_title_to_alias($segments[0]); 
$manufacture_id=0;
$category_id=0;
$product_id=0;

$new_segments=array();
foreach($segments as $segment)
{
$bUnset=false;
$search='limit,';
if(substr($segment,0,strlen($search))==$search)
{
$vars['limit'] = str_replace($search,'',$segment);
$bUnset=true;
}

$search='limitstart,';
if(substr($segment,0,strlen($search))==$search)
{
$vars['limitstart'] = str_replace($search,'',$segment);
$bUnset=true;
}
if($bUnset==false)
$new_segments[]=$segment;
}
$segments $new_segments;
$count_segment=count($segments);
if($count_segment==1// Check if it manufacturer or first level category
{
$manufacturer_id=get_manufacturer_id_by_alias($firstSegment);
if($manufacturer_id==0)
$category_id=get_category_id_by_alias($firstSegment );
}
elseif($count_segment>=2// Can be multiple level category or product details page
{
$category_id=get_category_id_by_alias($segments);
$product_id=get_product_id_by_alias($segments);
$manufacturer_id=get_mf_id_by_product_id($product_id);
}
if(defined('VMSEFDEBUG'))
{
echo '<br>$manufacture_id : ' $manufacturer_id;
echo '<br>$category_id : ' $category_id;
echo '<br>$product_id : ' $product_id;
}
if($manufacturer_id>0)
{
$vars['page'] = "shop.browse";
$vars['manufacturer_id']=$manufacturer_id;
}
if($category_id>0)
{
$vars['page'] = "shop.browse";
$vars['category_id']=$category_id;
}
if($product_id>0)
{
$vars['page'] = "shop.product_details";
$vars['product_id']=$product_id;
}

switch($firstSegment){
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CREATE_AN_ACCOUNT'));
$vars['page'] = "shop.registration";
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CART')):
$vars['page'] = "shop.cart";
break; 
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ACCOUNT_MAINTENANCE')):
$vars['page'] = "account.index";
if(isset($segments[1])==true)
if(convert_title_to_alias($segments[1])==convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ACCOUNT_MAINTENANCE_ORDER_DETAILS')))
{
$vars['show_page']='account.order_details';
$_POST['show_page']=$vars['show_page'];
$_GET['show_page']=$vars['show_page'];
$_REQUEST['show_page']=$vars['show_page'];
}
if(isset($segments[2])==true)
{
$vars['order_id']=$segments[2];
$_POST['order_id']=$vars['order_id'];
$_GET['order_id']=$vars['order_id'];
$_REQUEST['order_id']=$vars['order_id'];
}
break; 
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_SHOP_ADMINISTRATION')):
$vars['page'] = "store.index";
$vars['pshop_mode'] = "admin";
break;
/*This is for all products page*/
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_BROWSE_ALL_PRODUCTS_IN_SHOP')):
$vars['page'] = "shop.browse";
$vars['category'] = "";
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ADVANCED_SEARCH')):
$vars['page'] = "shop.search";
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_ASK_QUESTION_ABOUT_THIS_PRODUCT')): //PAGE_PRODUCT_ENQUIRY:
$vars['page'] = "shop.ask";
unset($segments[0]);
$vars['category_id'] = get_category_id_by_alias($segments);
$vars['product_id'] = get_product_id_by_alias($segments);
break; 
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT')):
$vars['page'] = "checkout.index";

if(isset($segments[1]) && ($segments[1]=="ssl_redirect")){
$vars['ssl_redirect'] = 1;
$vars['redirected'] = 1;
}

if(isset($segments[2]) && ($segments[2]=="redirected")){
$vars['redirected'] = 1;
}
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT_BILLING_INFORMATION')):
$vars['page'] = "account.billing";
if(isset($segments[1])){
$vars['next_page'] = "checkout.index";
}
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_CHECKOUT_SHIPPING_INFORMATION')):
$vars['page'] = "account.shipto";
if($segments[1]){
$vars['next_page'] = "checkout.index";
}
if($segments[2]){
$vars['user_info_id'] =$segments[2];
}
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_TERMS_OF_SERVICE')):
$vars['page'] = "shop.tos";
break;

case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VM_FEED')):
$vars['page'] = "shop.feed";
unset($segments[0]);
$vars['category_id'] = get_category_id_by_alias($segments);

break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_ACCOUNT_SHIPPING')):
$vars['page'] = "account.shipping";
if($segments[1]){
$vars['next_page'] = "checkout.index";
}
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_RECOMMEND')):
$vars['page'] = "shop.recommend";
$vars['pop'] = 1;
$vars['tmpl']= "component";
unset($segments[0]);
$category_id=get_category_id_by_alias($segments);
$product_id=get_product_id_by_alias($segments);
$vars['category_id']=$category_id;
$vars['product_id']=$product_id;

break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_ORDER_DETAILS')):
$vars['page'] = "account.order_details";
$vars['order_id'] = $segments[1];
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_NOTIFY')):
$vars['page'] = "shop.waiting_list";
if(count($segments)==2)
{
$vars['product_id'] =get_product_id_by_alias($segments[1]);
}
else
{
unset($segments[0]);
$vars['category_id'] = get_category_id_by_alias($segments);
$vars['product_id'] = get_product_id_by_alias($segments);
}
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_PRINT')):
$vars['pop']=1;
$vars['tmpl']='component';
unset($segments[0]);
$vars['category_id'] = get_category_id_by_alias($segments);
$vars['product_id'] = get_product_id_by_alias($segments);
$vars['page']='shop.browse';
if($vars['product_id'])
$vars['page']='shop.product_details';
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_MANUFACTURER')):
$vars['page']='shop.manufacturer_page';
$vars['manufacturer_id']=get_manufacturer_id_by_alias($segments[1]);
$vars['output']='lite';
$vars['tmpl']='component';
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_VENDOR')):
$vars['page']='shop.infopage';
$vars['vendor_id']=get_vendor_id_by_alias($segments[1]);
$vars['output']='lite';
$vars['tmpl']='component';
break;
case convert_title_to_alias($VM_SEF_LANG->_('VM_SEF_PDF')):
$vars['page']='shop.pdf_output';
$vars['pop']=1;
$vars['output']='pdf';

unset($segments[0]);
$vars['category_id'] = get_category_id_by_alias($segments);
$vars['product_id'] = get_product_id_by_alias($segments);
$vars['showpage']='shop.browse';
if($vars['product_id'])
$vars['showpage']='shop.product_details';

break;
}
return $vars;
}


function 
convert_title_to_alias($title)
{
$alias JFilterOutput::stringURLSafe(str_replace(':','-',$title));
return $alias;
}

/*
This function returns category/subcatgory alias string
*/
function getCategoryTitle($id// Mutiple level category ->Build
{
$db = & JFactory::getDBO();
$category=array();
$category[]=$id;
$category_id=$id;
while(true)
{
$query="SELECT * FROM `#__vm_category_xref` WHERE `category_child_id`={$category_id}";
$db->setQuery($query);
$row=$db->loadObject();
if($row->category_parent_id==0)
break;
else
{
$category[]=$row->category_parent_id;
$category_id=$row->category_parent_id;
}
}
$category=array_reverse($category);
$category_alias=array();
for($i=0;$i<count($category);$i++)
{
$category_id=$category[$i];
$query "SELECT category_name,category_id
FROM #__vm_category
WHERE category_id=
{$category_id}";
$db->setQuery($query);
$category_name=$db->loadResult();
if(check_category_by_categorty($category_id,$category_name))
$category_alias[] = convert_title_to_alias($category_id .'-'.$category_name);
else
$category_alias[] = convert_title_to_alias($category_name);
}
return $category_alias;
}

function 
getProductTitle($id,$category_id=null){
$db = & JFactory::getDBO();
$query 'SELECT product_name ,product_id,product_sku
FROM #__vm_product 
WHERE product_id = ' 
. (int) $id;

$db->setQuery($query);
$row $db->loadObject();
// gets category name of item
$product_name $row->product_name;
$product_sku $row->product_sku;
if (check_product_by_category($category_id,$product_name))
$product_name convert_title_to_alias($product_sku .'-'.$product_name);
else
$product_name convert_title_to_alias($product_name);

return $product_name;
}

function 
getVendorTitle($id)
{
$db = & JFactory::getDBO();
$query 'SELECT  vendor_store_name ,vendor_id  
FROM #__vm_vendor   
WHERE vendor_id  = ' 
. (int) $id;
$db->setQuery($query);
return convert_title_to_alias($db->loadResult());
}
function 
get_Vendor_id_by_alias($alias// MF name will be prefix with 'm-' in case of MF name and Category name is the same
{
$db=JFactory::getDBO();
$query="SELECT vendor_store_name,vendor_id 
FROM #__vm_vendor"
;
$db->setQuery($query);
$rows=$db->loadObjectList();
foreach($rows as $row)
{
if(convert_title_to_alias($row->vendor_store_name)==convert_title_to_alias($alias))
return $row->vendor_id;
}
return 0;
}
function 
getmanufacturerTitle($id){
$db = & JFactory::getDBO();
$query 'SELECT  mf_name ,manufacturer_id 
FROM #__vm_manufacturer   
WHERE manufacturer_id = ' 
. (int) $id;
$db->setQuery($query);
$row=$db->loadObject();
if(!$row)
return '';

$mf_name $row->mf_name;

if(check_category_by_mf($mf_name))
$mf_name =  convert_title_to_alias($row->manufacturer_id.'-'.$mf_name);
else
$mf_name convert_title_to_alias($mf_name);
return $mf_name;
}
function 
get_manufacturer_id_by_alias($alias// MF name will be prefix with 'm-' in case of MF name and Category name is the same
{
$db=JFactory::getDBO();
$query="SELECT manufacturer_id,mf_name 
FROM #__vm_manufacturer"
;
$db->setQuery($query);
$rows=$db->loadObjectList();
foreach($rows as $row)
{
if(convert_title_to_alias($row->mf_name)==convert_title_to_alias($alias) OR convert_title_to_alias($row->manufacturer_id.'-'.$row->mf_name)==convert_title_to_alias($alias)) 
{
if(check_category_by_mf($row->mf_name))
{
if($row->manufacturer_id '-'.convert_title_to_alias($row->mf_name)==convert_title_to_alias($alias))
return $row->manufacturer_id;
}
else
{
return $row->manufacturer_id;
}
}
}
return 0;
}

function 
get_category_id_by_alias($alias// Mutiple level category ->Parse
{
$db=JFactory::getDBO();
$query="SELECT category_id,category_name FROM #__vm_category";
$db->setQuery($query);
$rows=$db->loadObjectList();
$segments=array();
if(is_array($alias))
$segments $alias;
else
$segments[] = $alias;

$existing_alias=$segments;
$category_parent_id=0;
//for($i=0;$i<count($segments);$i++)
foreach($segments as $i=>$value)
{
$query="SELECT `#__vm_category`.category_id,`#__vm_category`.category_name ,`#__vm_category_xref`.category_parent_id
FROM `#__vm_category` , `#__vm_category_xref`
WHERE `#__vm_category`.`category_id` = `#__vm_category_xref`.`category_child_id`
AND `#__vm_category`.`category_publish`='Y'
AND `#__vm_category_xref`.`category_parent_id`=
{$category_parent_id}";
$db->setQuery($query);
if(defined('VMSEFDEBUG'))
echo $db->_sql '<br />';

$rows=$db->loadObjectList();
if(!$rows)
{
$alias $existing_alias;
return $category_parent_id;
}
foreach($rows as $row)
{
if(defined('VMSEFDEBUG'))
echo convert_title_to_alias($row->category_name) .'=='.$segments[$i] .'<br />';
if(convert_title_to_alias($row->category_name)==convert_title_to_alias($segments[$i])
OR $row->category_id.'-'.convert_title_to_alias($row->category_name)==convert_title_to_alias($segments[$i]))
{
$category_parent_id=$row->category_id;
unset($existing_alias[$i]);
break;
}
}
}
$alias $existing_alias;
return $category_parent_id;
}
function 
get_category_id_by_alias_remove_segments(&$alias// Mutiple level category ->Parse
{
$db=JFactory::getDBO();
$query="SELECT category_id,category_name FROM #__vm_category";
$db->setQuery($query);
$rows=$db->loadObjectList();
$segments=array();
if(is_array($alias))
$segments $alias;
else
$segments[] = $alias;

$existing_alias=$segments;
$category_parent_id=0;
//for($i=0;$i<count($segments);$i++)
foreach($segments as $i=>$value)
{
$query="SELECT `#__vm_category`.category_id,`#__vm_category`.category_name ,`#__vm_category_xref`.category_parent_id
FROM `#__vm_category` , `#__vm_category_xref`
WHERE `#__vm_category`.`category_id` = `#__vm_category_xref`.`category_child_id`
AND `#__vm_category`.`category_publish`='Y'
AND `#__vm_category_xref`.`category_parent_id`=
{$category_parent_id}";
$db->setQuery($query);
if(defined('VMSEFDEBUG'))
echo $db->_sql '<br />';

$rows=$db->loadObjectList();
if(!$rows)
{
$alias $existing_alias;
return $category_parent_id;
}
foreach($rows as $row)
{
if(defined('VMSEFDEBUG'))
echo convert_title_to_alias($row->category_name) .'=='.$segments[$i] .'<br />';
if(convert_title_to_alias($row->category_name)==convert_title_to_alias($segments[$i])
OR $row->category_id.'-'.convert_title_to_alias($row->category_name)==convert_title_to_alias($segments[$i]))
{
$category_parent_id=$row->category_id;
unset($existing_alias[$i]);
break;
}
}
}
$alias $existing_alias;
return $category_parent_id;
}
function 
get_product_id_by_alias($alias)
{
if(is_array($alias))
$segments $alias;
else
$segments[] = $alias;

$db=JFactory::getDBO();
$query="SELECT `#__vm_product`.`product_id`,`#__vm_product`.`product_name`,`#__vm_product`.`product_sku`
FROM `#__vm_product` , `#__vm_product_category_xref`
WHERE `#__vm_product`.`product_id` =`#__vm_product_category_xref`.`product_id`"
;
$category_id=get_category_id_by_alias_remove_segments($segments);
if(count($segments)==0)
return 0;

foreach($segments as $segment)
{
$product_alias $segment;
break;
}
if($category_id)
$query .=" AND `#__vm_product_category_xref`.`category_id`={$category_id}";
$db->setQuery($query);
$rows=$db->loadObjectList();
foreach($rows as $row)
{
if(defined('VMSEFDEBUG'))
{
echo convert_title_to_alias($row->product_name) .'=='.convert_title_to_alias($product_alias) . '<br />';
echo convert_title_to_alias($row->product_sku.'-'.$row->product_name).'=='.convert_title_to_alias($product_alias).'<br />';
}
if(convert_title_to_alias($row->product_name)==convert_title_to_alias($product_alias)
OR convert_title_to_alias($row->product_sku.'-'.$row->product_name)==convert_title_to_alias($product_alias))
return $row->product_id;
}
return 0;
}
function 
get_product_sef_url($product_id)
{
$segments=array();
$db=JFactory::getDBO();
$query="SELECT #__vm_manufacturer.manufacturer_id , #__vm_manufacturer.mf_name
FROM #__vm_product_mf_xref,#__vm_manufacturer
WHERE  #__vm_product_mf_xref.manufacturer_id=#__vm_manufacturer.manufacturer_id AND
#__vm_product_mf_xref.product_id=
{$product_id}";
$db->setQuery($query);
$row=$db->loadObject();
if($row!=null)
$segments[]=convert_title_to_alias($row->mf_name);
else
$segments[]='-';


$query="SELECT #__vm_product.product_id,#__vm_product.product_name
FROM #__vm_product
WHERE product_id=
{$product_id}";
$db->setQuery($query);
$row=$db->loadObject();
if($row!=null)
$segments[]=convert_title_to_alias($row->product_name);

return $segments;
}
function 
get_mf_id_by_product_id($product_id)
{
$db=JFactory::getDBO();
$query="SELECT #__vm_manufacturer.manufacturer_id 
FROM #__vm_manufacturer,#__vm_product_mf_xref
WHERE #__vm_manufacturer.manufacturer_id=#__vm_product_mf_xref.manufacturer_id 
AND #__vm_product_mf_xref.product_id=
{$product_id}";
$db->setQuery($query);
return intval($db->loadResult());
}
function 
get_category_id_by_product_id($product_id)
{
$db=JFactory::getDBO();
$query="SELECT #__vm_category.category_id 
FROM #__vm_category,#__vm_product_category_xref
WHERE #__vm_category.category_id=#__vm_product_category_xref.category_id 
AND #__vm_product_category_xref.product_id=
{$product_id}";
$db->setQuery($query);
return intval($db->loadResult());
}
function 
check_category_by_mf($mf_name)
{
$db = & JFactory::getDBO();
$query="SELECT COUNT(*)
FROM `#__vm_category`, `#__vm_category_xref`
WHERE `#__vm_category`.`category_id` = `#__vm_category_xref`.`category_child_id`
AND `#__vm_category_xref`.`category_parent_id`=0
AND `#__vm_category`.`category_publish` ='Y'
AND `#__vm_category`.`category_name`=" 
.$db->Quote($mf_name);
$db->setQuery($query);
return  ($db->loadResult()>0);
}
function 
check_category_by_categorty($category_id,$category_name)
{
$db = & JFactory::getDBO();
$query ="SELECT `category_parent_id` 
FROM `#__vm_category_xref` 
WHERE `category_child_id`=
{$category_id}";
$db->setQuery($query);
$category_parent_id intval($db->loadResult());

$query="SELECT COUNT(*)
FROM `#__vm_category`,`#__vm_category_xref` 
WHERE `#__vm_category`.`category_id` = `#__vm_category_xref`.`category_child_id`
AND `#__vm_category_xref`.`category_parent_id`=
{$category_parent_id}
AND `#__vm_category`.`category_id`!=
{$category_id} 
AND `#__vm_category`.`category_publish` ='Y'
AND `#__vm_category`.`category_name`=" 
.$db->Quote($category_name);
$db->setQuery($query);
return  ($db->loadResult()>0);
}
function 
check_product_by_category($category_id,$product_name)
{
$db JFactory::getDBO();
$query="SELECT COUNT(*) 
FROM #__vm_product, #__vm_product_category_xref
WHERE #__vm_product.product_id = #__vm_product_category_xref.product_id
AND #__vm_product_category_xref.category_id=
{$category_id}
AND #__vm_product.product_name=" 
$db->Quote($product_name);
$db->setQuery($query);
if($db->loadResult()>1)
return true;
$query="SELECT COUNT(*) 
FROM #__vm_category, #__vm_category_xref
WHERE #__vm_category.category_id = #__vm_category_xref.category_child_id
AND #__vm_category_xref.category_parent_id=
{$category_id}
AND #__vm_category.category_name=" 
$db->Quote($product_name);
$db->setQuery($query);
if($db->loadResult()>0)
return true;

return false;


}
class 
vm_sef_language
{
function vm_sef_language()
{
$db=JFactory::getDBO();

$query="CREATE TABLE IF NOT EXISTS `#__vm_sef_language` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`lang_key` VARCHAR( 255 ) NULL ,
`lang` VARCHAR( 255 ) NULL
) ;"
;
$db->setQuery($query);
$db->query();

$langvars = array (
'VM_SEF_VM_CREATE_AN_ACCOUNT' => 'Create an account',
'VM_SEF_VM_CART' => 'View Your Cart Contents',

'VM_SEF_VM_ACCOUNT_MAINTENANCE' => 'View your account details',
'VM_SEF_VM_ACCOUNT_MAINTENANCE_ORDER_DETAILS' => 'Order Details',


'VM_SEF_VM_SHOP_ADMINISTRATION' => 'Shop Administration',

'VM_SEF_VM_BROWSE_ALL_PRODUCTS_IN_SHOP' => 'View All Products in Shop',

'VM_SEF_VM_ADVANCED_SEARCH' => 'Advanced search',

'VM_SEF_VM_ASK_QUESTION_ABOUT_THIS_PRODUCT' => 'Ask Question About This Product',

'VM_SEF_VM_CHECKOUT' => 'Check out',
'VM_SEF_VM_CHECKOUT_BILLING_INFORMATION' => 'Billing Information',
'VM_SEF_VM_CHECKOUT_SHIPPING_INFORMATION' => 'Shipping Information',

'VM_SEF_VM_TERMS_OF_SERVICE' => 'Terms of Service',

'VM_SEF_VM_FEED' => 'Feed',

'VM_SEF_ACCOUNT_SHIPPING'=>'Account Shipping',
'VM_SEF_RECOMMEND'=>'Recommend',
'VM_SEF_ORDER_DETAILS'=>'Order Details',
'VM_SEF_NOTIFY'=>'Notify',
'VM_SEF_PRINT'=>'Print',
'VM_SEF_PDF'=>'Pdf',
'VM_SEF_MANUFACTURER'=>'Manufacturer',
'VM_SEF_VENDOR'=>'Vendor',
);



foreach($langvars as $key=>$value)
{
$query="SELECT count(*) FROM #__vm_sef_language WHERE `lang_key`=" $db->Quote($key);
$db->setQuery($query);
if($db->loadResult()==0)
{
$query='INSERT INTO #__vm_sef_language SET '
' `lang_key`=' .$db->Quote($key)
', `lang`=' .$db->Quote($value);
$db->setQuery($query);
$db->query();
}
}
}
function _($key)
{
$db=JFactory::getDBO();
$query="SELECT id ,`lang` FROM #__vm_sef_language WHERE `lang_key`=" $db->Quote($key);
$db->setQuery($query);
$row=$db->loadObject();
return $row->lang;
}
}
global 
$VM_SEF_LANG;
$VM_SEF_LANG=new vm_sef_language;
?>
http://www.mediaducks.info - Applicazioni software, Siti Web, Consulenze informatiche

Offline jk4nik

  • Instancabile
  • ******
  • Post: 6517
  • Sesso: Maschio
    • Mostra profilo
Re:SEF virtuemart, router.php
« Risposta #1 il: 22 Dic 2010, 09:57:36 »
ciao omit,

se magari indichi cosa hai modificato e perchè, può tornare utile a tutta la comunità,
altrimenti ci si sbatte sopra la testa per capire qualcosa che non funziona perchè personalizzato per le tue esigenze.

ciao
jk
Sta per essere approvata la nuova nomenclatura per le taglie dei reggiseni: essi saranno d'ora in poi descritti con le lettere dell'alfabeto ABCDEF: A - Apprezzabile B - Buona C - Cannonata D - Discreta E - Esagerata F - Falsa

Offline omit

  • Esploratore
  • **
  • Post: 61
  • Sesso: Maschio
    • Mostra profilo
Re:SEF virtuemart, router.php
« Risposta #2 il: 22 Dic 2010, 10:31:12 »
le modifiche sono molte, perchè il file di riferimento che ho modificato era piuttosto base... ;)

diciamo che io non uso componenti e/o plugin specifici per le sef, quindi avevo bisogno di un file router.php che con la semplice attivazione delle impostazioni generali di joomla per SEO mi aiutasse con le sef di virtuemart.

Non è testato per le flypage (io non le uso), ma comunque è funzionante per le categorie shop.browse virtuemart e le diverse sottocategorie.
http://www.mediaducks.info - Applicazioni software, Siti Web, Consulenze informatiche

Offline jk4nik

  • Instancabile
  • ******
  • Post: 6517
  • Sesso: Maschio
    • Mostra profilo
Re:SEF virtuemart, router.php
« Risposta #3 il: 22 Dic 2010, 10:44:33 »
allora è meglio che posti anche il "file base" in maniera tale che chiunque possa prendere visione delle modifiche semplicemente usando csdiff/windiff

ciao
jk
Sta per essere approvata la nuova nomenclatura per le taglie dei reggiseni: essi saranno d'ora in poi descritti con le lettere dell'alfabeto ABCDEF: A - Apprezzabile B - Buona C - Cannonata D - Discreta E - Esagerata F - Falsa

 



Web Design Bolzano Kreatif