2012-05-02 32 views
5

Tôi bắt đầu với cả php và phát triển Joomla, và thấy khó làm việc trong Joomla để làm một số công cụ khá đơn giản. Đã đi qua ví dụ về Joomla MVC và Lynda (và đã xây dựng một vài khung nhìn đơn giản cho đến nay).Joomla: Gọi chức năng trợ giúp từ bên trong một mô hình?

Tôi có tệp trợ giúp/lớp/chức năng xuất tất cả các userids tồn tại trong bảng "đã hoàn tất" để tôi có thể hiển thị liên kết cho bản ghi mới dựa trên người dùng đó hoặc chỉnh sửa bản ghi của người dùng hiện có.

Tôi đã sử dụng một chức năng khác trong tệp trợ giúp này thành công trong một phần khác của thành phần (Joomla: Write and call a helper function in a component).

Khi tôi làm điều tương tự trong mô hình, tôi nhận được điều này: "Lỗi nghiêm trọng: Gọi tới phương thức được bảo vệ JModel :: _ createFileName() từ ngữ cảnh 'JView' trong thư mục C: \ wamp \ www \ ilplocal \ \ joomla \ application \ component \ view.php trên dòng 773 ". Khi tôi thử nó trong quan điểm, hoạt động tốt - nhưng tôi cần đầu ra trong mô hình.

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;       

    }   
} 

Trong mô hình:

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

Dòng này được ném lỗi: $completions_exist = Jview::loadHelper('lookups');

Tôi đã tìm thấy một số thực sự mơ hồ tham chiếu đến một cái gì đó gọi là JLoader :: đăng ký để kéo các hàm trợ giúp bu t không thể tìm thấy bất kỳ tài liệu tốt về điều đó trong Joomla ngoại trừ tất cả mọi người nói rằng chỉ cần sử dụng đó. SO tôi đã cố gắng sử dụng nó như vậy:

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

mà ném lỗi này: "Fatal error: Class 'LookupHelper' không tìm thấy trong C: \ wamp \ path \ to \ mô hình \ không \ to \ lookups.php. Đã cố gắng thao tác các JLoader :: đăng ký (tất cả mọi thứ ở đây) và nó không ảnh hưởng đến đường dẫn của thông báo lỗi

Suy nghĩ Tại sao nó hoạt động theo quan điểm chứ không phải trong mô hình? trong một mô hình?

Cảm ơn!

##### EDIT

Nhờ @cppl có vẻ như đó là vấn đề đường dẫn với bit thứ hai của mã. Ngoài ra tôi đọc rằng .DS. ký hiệu sẽ được loại bỏ trong các phiên bản tương lai - vì vậy mã đó là làm việc là:

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

Trả lời

4

Cho phép phá vỡ này xuống:

  1. Trong Joomla! tệp trợ giúp thành phần của bạn phải nằm trong `/mycomponent/helpers/lookup.php '

  2. JLoader:: là Joomla! cách để làm điều đó, nhưng bạn có thể dễ dàng sử dụng ví dụ require_once của PHP. require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/myfunctions.php';

  3. Đường dẫn của bạn có đúng không? - bạn đang cung cấp dirname(JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php' nhưng bạn đã bao gồm đường dẫn đến thành phần của mình trong dirname which will the parent element of the path only. Vì vậy, JLoader đang tìm kiếm trong /administrator/helpers/lookups.php.

  4. JPATH_COMPONENT_ADMINISTRATOR được khởi tạo như một phần của renderComponent() gọi của Joomla! Tại nó JComponentHelper lớp nếu bạn áp dụng dirname với nó khi nó không phải cài đặt, bạn sẽ nhận lại một dấu chấm (ví dụ. Thư mục hiện hành) như vậy trong mô hình mà bạn có thể sẽ được gửi ./helpers/lookups.php đến cuộc gọi JLoader.

+0

1) Kiểm tra. 2) Đây là một phần derp trên phần của tôi - yup, mà làm việc 3) Ahhhhhh - Tôi không biết đó là một cuộc gọi PHP, tôi lặp lại con đường và điều chỉnh cho đến khi nó đã đúng. Tuyệt vời! 4) ahh, hiểu rồi! Bất kỳ ý tưởng tại sao 'Jview :: loadHelper ('tra cứu');' đã ném một lỗi? Tôi nghĩ rằng đó là cách bạn làm điều đó, bây giờ tôi không chắc chắn khi nào sử dụng nó. Cảm ơn bạn rất nhiều! – Gisto

+1

Rất vui được trợ giúp. Lỗi có thể là do đường dẫn bắt đầu bằng dấu '.' tương đương với thư mục hiện tại. – Craig

0

Bạn có thể gọi helper trong mô hình bằng phương pháp sau:

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

này sẽ bao gồm những người trợ giúp tập tin/events.php từ thư mục thành phần.

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

Các vấn đề liên quan