2012-05-02 9 views
5

मैं दोनों PHP और जूमला विकास के साथ शुरू कर रहा हूं, और कुछ सरल सामग्री करने के लिए जूमला के भीतर मुश्किल काम करना ढूंढ रहा हूं। जूमला एमवीसी उदाहरण और लिंडा (और अब तक कुछ सरल विचारों का निर्माण किया है) के माध्यम से चला गया।जूमला: मॉडल के भीतर से सहायक कार्य कॉल करें?

मेरे पास एक सहायक फ़ाइल/कक्षा/फ़ंक्शन है जो "पूर्ण" तालिका में मौजूद सभी उपयोगकर्ता आईडी आउटपुट करता है, इसलिए मैं उस उपयोगकर्ता के आधार पर या तो एक नए रिकॉर्ड के लिए एक लिंक प्रदर्शित कर सकता हूं या मौजूदा उपयोगकर्ता के रिकॉर्ड को संपादित कर सकता हूं।

मैंने पहले से ही इस सहायक फ़ाइल में घटक (Joomla: Write and call a helper function in a component) में सफलतापूर्वक एक अलग फ़ंक्शन का उपयोग किया है।

जब मैं मॉडल में एक ही काम करता हूं, तो मुझे यह मिल रहा है: "घातक त्रुटि: संरक्षित विधि पर कॉल करें JModel :: _ createFileName() संदर्भ में 'JView' से संदर्भित करें: \ wamp \ www \ ilplocal \ पुस्तकालय लाइन 773 पर \ joomla \ application \ घटक \ view.php "। जब मैं इसे दृश्य में आज़माता हूं, ठीक काम करता है - लेकिन मुझे मॉडल में आउटपुट की आवश्यकता है।

कोड:

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 नामक किसी चीज़ के संदर्भ :: सहायक कार्यों में खींचने के लिए रजिस्टर bu जूमला में उस पर कोई भी अच्छा दस्तावेज नहीं मिल रहा है, इसके अलावा हर किसी को इसका इस्तेमाल करने के लिए कहा जाता है। \ मॉडल \ नहीं \ lookups.php करने को \ \ WAMP \ पथ \: तो मैं इतना है कि यह उपयोग करने की कोशिश:

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

जो इस त्रुटि फेंकता है: गंभीर त्रुटि ": क्लास 'LookupHelper' सी में नहीं मिला। JLoader :: रजिस्टर (यहां सब कुछ) में हेरफेर करने का प्रयास किया और यह त्रुटि संदेश के पथ को प्रभावित नहीं करता है।

विचार? यह एक दृश्य में क्यों काम करता है और मॉडल में नहीं? मैं सहायक कार्यों का उपयोग कैसे करूं एक मॉडल के भीतर?

धन्यवाद!

##### संपादित करें

@cppl के लिए धन्यवाद ऐसा लगता है कि यह कोड के दूसरे बिट के साथ एक पथ मुद्दा है। इसके अलावा मैंने पढ़ा कि .DS। अंकन भविष्य के संस्करणों में चरणबद्ध तरीके से समाप्त हो जाएगा - तो कोड है कि काम कर रहा है है:

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

उत्तर

4

चलें इस टूट:

  1. जूमला में! आपके घटकों की सहायक फ़ाइल '/mycomponent/helpers/lookup.php'

  2. JLoader:: जूमला में होनी चाहिए! ऐसा करने का तरीका, लेकिन आप आसानी से आसानी से PHP के require_once उदाहरण का उपयोग कर सकते हैं। require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/myfunctions.php';

  3. क्या आपका रास्ता सही है? - आप dirname(JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php' प्रदान कर रहे हैं लेकिन आपने dirname which will the parent element of the path only में अपने घटक के पथ को लपेट लिया है। तो JLoader/administrator/helpers/lookups.php में देख रहा है।

  4. JPATH_COMPONENT_ADMINISTRATOR यह JComponentHelper वर्ग है में यदि आप इसे करने के लिए dirname लागू होते हैं जब यह सेटअप आप मॉडल क्या तुम करोगी सकता है में तो एक बिंदु (यानी। वर्तमान निर्देशिका) वापस मिल जाएगा नहीं है जूमला! के renderComponent() कॉल के हिस्से के रूप initialised है ./helpers/lookups.php को JLoader कॉल पर पास करें।

+0

1) जांचें। 2) यह मेरे भाग पर एक आंशिक derp था - yup, यह काम किया 3) अहह्ह्ह - मुझे नहीं पता था कि एक PHP कॉल था, मैंने पथ को प्रतिबिंबित किया और सही होने तक समायोजित किया। बहुत बढ़िया! 4) आह, समझ गया! कोई विचार क्यों 'ज्यूव :: लोडहेल्पर (' लुकअप ');' एक त्रुटि फेंक दी? मैंने सोचा कि यह आप कैसे करते हैं, अब मुझे यकीन नहीं है कि किस का उपयोग करना है। आपको बहुत - बहुत धन्यवाद! – Gisto

+1

मदद करने के लिए खुशी हुई। त्रुटि शायद इसलिए है क्योंकि पथ '।' से शुरू होता है। जो वर्तमान निर्देशिका के बराबर है। – Craig

0

आप निम्न विधि द्वारा मॉडल के भीतर सहायक कॉल कर सकते हैं:

JLoader::import('helpers.events', JPATH_COMPONENT);

इस घटक निर्देशिका से फ़ाइल सहायकों/events.php शामिल होंगे।

$_helper = new EventsHelper(); echo $_helper->getAnyInsideMethod();exit;

संबंधित मुद्दे