Joomla路由器问题

I had a code that works for addsmanager component but they make some changes and now dont work anymore. Old code is this

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 ;
}

They have this code now

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 i have it modified like this

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;
}

The ad_model is loaded but if instead ad_model is ad_motomodel this isn t loaded. Is a way to make this code work? I am not such good at php .

Your code was originally written to work with two different variables ($result and $url) but uses one instead.

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

Once the thrid line gets executed, you now don't have the object $result anymore. It is gone. You now have a string $result containing whatever the "stringification" of your previous object yields (an empty string in this case) plus a dash and the contents of ad_model. After that, you cannot access $result->ad_motomodel anymore.

What you really want is something like this:

$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;