5

私は、php と Joomla の両方の開発から始めていますが、Joomla 内でかなり単純なことを行うのは難しいと感じています。Joomla MVC の例と Lynda を調べました (これまでにいくつかの単純なビューを作成しました)。

「完了」テーブルに存在するすべてのユーザー ID を出力するヘルパー ファイル/クラス/関数があるため、そのユーザーに基づく新しいレコードのリンクを表示したり、既存のユーザーのレコードを編集したりできます。

コンポーネントの別の部分で、このヘルパー ファイルの別の関数を既に正常に使用しています ( Joomla: コンポーネントでヘルパー関数を記述して呼び出す)。

モデルで同じことをすると、次のようになります。 \component\view.php 行 773". ビューで試してみると問題なく動作しますが、モデルに出力が必要です。

コード:

lookups.php

abstract class LookupHelper {

    public function other_functions($vars){
        ...
    }

    public function completions_exist() {

        $db =& JFactory::getDBO();            
        $query = $db->getQuery(true);

        $query->SELECT(' #__completed.completed_userid as UserID');
        $query->FROM (' #__completed');
        $query->GROUPBY (' #__completed.completed_userid ');

       $db->setQuery($query);    
       $result = $db->loadResultArray(0); 

       return $result;                        

    }        
}

モデルでは:

$completions_exist = Jview::loadHelper('lookups'); 
$completions_exist = LookupHelper::completions_exist();

この行はエラーをスローしています:$completions_exist = Jview::loadHelper('lookups');

ヘルパー関数をプルする JLoader::register と呼ばれるものへの非常に漠然とした参照をいくつか見つけましたが、Joomla でそれに関する適切なドキュメントを見つけることができません。だから私はそれを次のように使ってみました:

 JLoader::register('LookupHelper', dirname( JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php');
 $completions_exist = LookupHelper::completions_exist();

このエラーがスローされます:「致命的なエラー: クラス 'LookupHelper' が C:\wamp\path\to\model\not\to\lookups.php に見つかりません。JLoader::register(ここにあるすべて) を操作しようとしましたが、うまくいきません」 t は、エラー メッセージのパスに影響を与えます。

考え?モデルではなくビューで機能するのはなぜですか? モデル内でヘルパー関数を使用するにはどうすればよいですか?

ありがとう!

#####編集

@cppl のおかげで、コードの 2 番目のビットのパスの問題のようです。また、.DS. 記法は将来のバージョンで段階的に廃止される予定です - したがって、動作しているコードは次のとおりです。

JLoader::register('LookupHelper', JPATH_COMPONENT_ADMINISTRATOR.'/helpers/lookups.php');
$completions_exist = LookupHelper::completions_exist();
4

2 に答える 2

4

これを分解しましょう:

  1. ジュムラで!コンポーネント ヘルパー ファイルは「/mycomponent/helpers/lookup.php」にある必要があります。

  2. JLoader::Joomlaです!require_onceそれを行う方法ですが、PHPの例を同じように簡単に使用できます。require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/myfunctions.php';

  3. あなたの道は正しいですか?- 提供しdirname(JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php'ていますが、コンポーネントへのパスをラップしており、パスdirnameの親要素のみが含まれます。JLoaderで探しているのもそうです/administrator/helpers/lookups.php

  4. JPATH_COMPONENT_ADMINISTRATORJoomla! のクラス内のrenderComponent()呼び出しの一部として初期化されます。セットアップされていないときに適用すると、ドット (つまり、現在のディレクトリ) が返されるため、モデルでは呼び出しに渡すことができます。JComponentHelperdirname./helpers/lookups.phpJLoader

于 2012-05-02T23:44:16.620 に答える