php Joomla路由器问题

o3imoua4  于 2023-06-28  发布在  PHP
关注(0)|答案(1)|浏览(114)

我有一个代码,适用于addsmanager组件,但他们做了一些更改,现在不工作了。
老代码是这样的:

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

他们现在有这个密码

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

我把它修改成这样

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

ad_model被加载,但如果ad_model是ad_motomodel,则不会加载。是一种让代码工作的方法?我不太擅长PHP。

c3frrgcw

c3frrgcw1#

您的代码最初编写为使用两个不同的变量($result和$url),但使用了一个。

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

一旦第三行被执行,你就不再有对象$result了。它不见了。现在有了一个字符串$result,它包含前面对象的“字符串化”产生的任何内容(在本例中是一个空字符串)加上一个破折号和ad_model的内容。在此之后,您将无法再访问$result->ad_motomodel
你真正想要的是这样的东西:

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

相关问题