Joomla: Appel de fonction d'assistance à partir de l'intérieur d'un modèle?
Je commence avec php et Joomla développement, et de trouver qu'il est difficile de travailler dans Joomla pour faire assez simple. Est passé par la MVC Joomla exemple et Lynda (et ont construit une quelques simples vues à ce jour).
J'ai un fichier de helper/classe/fonction qui affiche toutes les identifiants qui existent dans la "terminé" table afin que je puisse afficher un lien, soit un nouveau record basé sur l'utilisateur ou modifier un utilisateur existant.
J'ai déjà utilisé une autre fonction dans ce fichier de helper avec succès dans une autre partie de la composante ( Joomla: Écrire et appeler une fonction d'assistance dans un composant ).
Quand je fais la même chose dans le modèle, j'obtiens ceci: "erreur Fatale: Appel à la méthode protégée JModel::_createFileName() dans un contexte "JView" dans C:\wamp\www\ilplocal\libraries\joomla\application\component\view.php sur la ligne de 773". Quand je l'ai essayer dans la vue, fonctionne très bien - mais j'ai besoin de la sortie dans le modèle.
Code:
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;
}
}
Dans le modèle:
$completions_exist = Jview::loadHelper('lookups');
$completions_exist = LookupHelper::completions_exist();
Cette ligne est en train de jeter de l'erreur: $completions_exist = Jview::loadHelper('lookups');
J'ai trouvé quelques très vagues références à quelque chose appelé JLoader::inscrivez-vous à tirer dans des fonctions d'assistance, mais ne peut pas trouver une bonne documentation sur que dans Joomla, sauf pour tout le monde en disant à l'utiliser. J'ai DONC essayé de l'utiliser comme ceci:
JLoader::register('LookupHelper', dirname( JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php');
$completions_exist = LookupHelper::completions_exist();
qui génère cette erreur: "Fatal error: Class 'LookupHelper' ne trouve pas dans C:\wamp\path\to\model\not\to\lookups.php. Essayé la manipulation de la JLoader::register(tout ici) et il n'a pas d'effet le chemin de la message d'erreur.
Pensées? Pourquoi faut-il travailler dans une vue et pas dans le modèle? Comment puis-je utiliser les fonctions d'assistance à l'intérieur d'un modèle?
Merci!
#####MODIFIER
Grâce à @cppl ressemble à un problème de chemin d'accès avec le deuxième morceau de code. Aussi, j'ai lu que l' .DS. la notation se fera progressivement dans les futures versions, de sorte que le code du travail est:
JLoader::register('LookupHelper', JPATH_COMPONENT_ADMINISTRATOR.'/helpers/lookups.php');
$completions_exist = LookupHelper::completions_exist();
OriginalL'auteur Gisto | 2012-05-02
Vous devez vous connecter pour publier un commentaire.
Permet de briser ce bas:
Dans Joomla! votre composants helper fichier doit être dans `/mycomponent/helpers/lookup.php'
JLoader::
est le Joomla! façon de le faire, mais vous pourriez tout aussi bien utiliser de PHPrequire_once
par exemple.require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/myfunctions.php';
Est votre chemin à droite? - vous êtes en fournissant
dirname(JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php'
mais vous avez enveloppé le chemin d'accès à votre composant dansdirname
qui sera le parent de l'élément du chemin d'accès uniquement. DoncJLoader
est à la recherche de/administrator/helpers/lookups.php
.JPATH_COMPONENT_ADMINISTRATOR
est initialisé dans le cadre de Joomla!'srenderComponent()
appel dansJComponentHelper
classe si vous appliquezdirname
quand c'est pas le programme d'installation vous permettra de revenir à un point (ie. répertoire courant) donc, dans le modèle, vous pourriez serait de passer./helpers/lookups.php
à laJLoader
appel.Jview::loadHelper('lookups');
a jeté une erreur? J'ai pensé que c'est comment vous le faites, maintenant, je ne suis pas sûr à utiliser. Merci beaucoup!Ravi de vous aider. L'erreur est probablement parce que le chemin commence par un '.' qui représente le répertoire courant.
OriginalL'auteur Craig
Vous pouvez appeler helper dans le modèle par la méthode suivante:
JLoader::import('helpers.events', JPATH_COMPONENT);
cela va inclure le fichier helpers/events.php à partir du répertoire composant.
$_helper = new EventsHelper();
echo $_helper->getAnyInsideMethod();exit;
OriginalL'auteur R T