私は主にサイトマップ操作のためにVirtuemartプラグインでArtio Joomsefコンポーネントを使用していますが、それを有効にするたびに、製品ページに次のエラーが表示されます。
非推奨:非静的メソッドJoomSefLogger :: Log()を静的に呼び出すことはできません。/mnt/data/vhosts/mydomain/httpdocs/components/com_sef/sef_ext/com_virtuemart.phpの行404の非互換コンテキストから$ thisを想定します
このエラーは、以下の関数に関連しています。
Function GetProductManufacturerId($productId)
{
$database = JFactory::getDBO();
$database->setQuery("SELECT `virtuemart_manufacturer_id` FROM `#__virtuemart_product_manufacturers` WHERE `virtuemart_product_id` = '{$productId}'");
$mId = $database->loadResult();
if (is_null($mId)) {
JoomSefLogger::Log("Manufacturer for product ID {$productId} not found.", $this, 'com_virtuemart');
}
return $mId;
}
エラーが表示されないように関数を変更する方法はありますか?残念ながら、Artioは、コンポーネント自体のトップアップとして購入しない限り、拡張機能のサポートを提供していません。サポートフォーラムはあまりアクティブではありません。
私はPHPに熱心ではないので、誰かがアドバイスを提供してコードを更新し、オーバーライドを使用してコードが再び表示されないようにできることを願っています。
これはJoomla 3.6.4 VM 3.0.18およびphp 5.6で実行されています。
事前にありがとうドナ
これはエラーではなく警告であるため、サイトを破壊することはなく、最も簡単な解決策は、厳密なエラー報告をオフにすることです(エラー報告は、とにかく実際のサイトではオフにする必要があります)。
php.netから:
PHP 5では、静的でないメソッドを静的に呼び出すと、E_STRICTレベルの警告が生成されます
PHP 7では、静的でないメソッドを静的に呼び出すことは非推奨であり、E_DEPRECATED警告を生成します。静的でないメソッドを静的に呼び出すサポートは将来削除される可能性があります。
変更JoomSefLogger::Log
から(new JoomSefLogger)->Log
は、JoomSefLogger
関数を静的にする場合と同様に、修正する場合があります。ただし、今後のパッチでは、このような変更が上書きされる可能性があることに注意してください。
とは言っても、最も賢明な解決策は