2017-08-15 4 views
-1

J'ai eu un code qui fonctionne pour le composant addsmanager mais ils font quelques changements et maintenant ne fonctionnent plus. ancien code est ceProblèmes de routeur Joomla

function getAdsmanagerRouteContent($id) 
{ 
    $db =JFactory::getDBO(); 
    $sql = "SELECT category,ad_manufacturers,ad_modelauto,ad_jetmodels,ad_model FROM #__adsmanager_ads WHERE id = ".(int)$id; 
    $db->setQuery($sql); 
    $result = $db->loadObject(); 
     $url = TText::_($result->ad_manufacturers); 
     if ($result->ad_modelauto != "") { 
      $url .= "-".TText::_($result->ad_modelauto); 
     } 
     if ($result->ad_jetmodels != "") { 
      $url .= "-".TText::_($result->ad_jetmodels); 
     } 
     if ($result->ad_model != "") { 
      $url .= "-".TText::_($result->ad_model); 
     } 

    $url = TTools::stringURLSafe($url); 
    $url = JString::substr($url ,0,30); 
    return $url ; 
} 

Ils ont ce code maintenant

function getAdsmanagerRouteContent($id) 
{ 
    $db =JFactory::getDBO(); 
    $sql = "SELECT ad_headline FROM #__adsmanager_ads WHERE id = ".(int)$id; 
    $db->setQuery($sql); 
    $result = $db->loadResult(); 
    $result= TTools::stringURLSafe($result); 
    $result = JString::substr($result,0,30); 
    return $result; 
} 

Wich je l'ai modifié comme celui-ci

function getAdsmanagerRouteModel($id) 
{ 
    $db =JFactory::getDBO(); 
    $sql = "SELECT ad_model,ad_motomodel FROM #__adsmanager_ads WHERE id = ".(int)$id; 
    $db->setQuery($sql); 
    $result = $db->loadResult(); 
     if ($result->ad_model != "") { 
      $result .= "-".TText::_($result->ad_model); 
     } 
     if ($result->ad_motomodel != "") { 
      $result .= "-".TText::_($result->ad_motomodel); 
     } 
    $result= TTools::stringURLSafe($result); 
    $result = JString::substr($result,0,30); 
    return $result; 
} 

Le ad_model est chargé, mais si au lieu ad_model est ad_motomodel ce ISN t chargé. Est-ce un moyen de faire fonctionner ce code? Je ne suis pas si bon à PHP.

Répondre

0

Votre code a été écrit à l'origine pour fonctionner avec deux variables différentes ($ result et $ url) mais en utilise un à la place.

$result = $db->loadResult(); 
if ($result->ad_model != "") { 
    $result .= "-".TText::_($result->ad_model); 
} 

Une fois la ligne thrid est exécuté, vous n'avez pas maintenant l'objet $result plus. C'est parti. Vous avez maintenant une chaîne $result contenant tout ce que la "stringification" de votre objet précédent donne (une chaîne vide dans ce cas) plus un tiret et le contenu de ad_model. Après cela, vous ne pouvez plus accéder au $result->ad_motomodel.

Qu'est-ce que vous voulez vraiment est quelque chose comme ceci:

$db =JFactory::getDBO(); 
$sql = "SELECT ad_model,ad_motomodel FROM #__adsmanager_ads WHERE id = ".(int)$id; 
$db->setQuery($sql); 
$result = $db->loadResult(); 
$url=""; 
if ($result->ad_model != "") { 
    $url .= "-".TText::_($result->ad_model); 
} 
if ($result->ad_motomodel != "") { 
    $url .= "-".TText::_($result->ad_motomodel); 
} 
$url = TTools::stringURLSafe($url); 
$url = JString::substr($url,0,30); 
return $url; 
+0

Je l'assortit mais ne work.Is le premier exemple. –