Κλήση Virtuemart κλάσης μέσω του helper.php ενός Joomla module?

Joomla! Extensions (Components, Modules, Plugins)

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
limitCracker
Δημοσιεύσεις: 20
Εγγραφή: 28 Ιουν 2013 23:00
Επικοινωνία:

Κλήση Virtuemart κλάσης μέσω του helper.php ενός Joomla module?

Δημοσίευση από limitCracker » 12 Ιούλ 2013 07:55

Χαίρετε παίδες,

έχω ένα πρόβλημα όταν καλώ μια class του VirtueMart από το helper.php ενός module. Παίρνω blank page ως αποτέλεσμα.

Λίγο background για να καταλάβετε καλύτερα.
Έχω φτιάξει ένα module/component όπου κάνει Price Filtering όπου εμφανίζει τις κατηγορίες των προϊόντων σε μια tree δομή εμφανισιακά σε ένα drop down menu. (δειτε attached εικόνα παρακάτω) (live site demo αυτού που έχω ως τώρα με δικό μου κώδικα κάτω κάτω αριστερά: LIVE )

Αυτό το κατάφερα με δικό μου κώδικα αλλά ύστερα από ψάξιμο είδα την VirtueMartModelCategory -> http://docs.virtuemart.net/api-vm2/d0/d ... egory.html και έχει πολλά καλούδια όπου αν την έκανα extend θα γλίτωνα μπόλικο κώδικα.

Οπότε πήγα στο helper.php του module και πρόσθεσα:

Κώδικας: Επιλογή όλων

class mod_vmpricefilt_categ extends VirtueMartModelCategory{
    function __construct(){
        parent::__contstruct();
    }
}
και ύστερα από το /tmpl/default.php του module προσπαθούσα να καλέσω τις κληρονομημένες μεθόδους μέσω κλήσης της κλάσης:
πχ

Κώδικας: Επιλογή όλων

mod_vmpricefilt_categ::countProducts($cid); 
δοκίμασα και μέσω object αλλά δεν ευδοκίμησε.

Ψιλιάζομαι MVC πρόβλημα. Μήπως πρέπει να φτιάξω controller για να καλέσω μεθόδους από την κλάση αυτή λόγω της MVC pattern?
Έχετε κάποια ιδέα τι μπορεί να συμβαίνει ή τι μπορεί να κάνω λάθος?
Συνημμένα
freestuff_vmpricefilt_helper_question.jpg

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Κλήση Virtuemart κλάσης μέσω του helper.php ενός Joomla module?

Δημοσίευση από alou » 12 Ιούλ 2013 17:23

Καταρχάς κάνεις subclass κάτι αν θες να φτιάξεις κάποιες πιο ειδικές μεθόδους, αλλιώς κάνεις instantiate ένα object και χρησιμοποιείς ότι υπάρχει στη διάθεσή σου ήδη από μεθόδους.

Όμως δεν κατάλαβα, το helper class είναι που πας να κάνεις extend?! αυτό δεν έχει κάποια λογική... δε βάζεις όλο το helper.php να καταλάβουμε τι ακριβώς κάνεις?

Το helper class, είναι σαν να λέμε το model σε ένα mvc pattern στο joomla. Θα φορτώσει / καλέσει / δημιουργήσει τα δεδομένα σου και θα τα στείλεις για προβολή στο /tmpl/default.php, δεν υπάρχει controller (η μέθοδος που θα χρησιμοποιηθεί δηλώνεται αν χρειάζεται στο mod_toModule.php που έχεις στο root του module

$myData = modtoModuleHelper::doSomething()

όπου το doSomething είναι μέθοδος στο helper class που φτιάχνεις και μετά στο tmpl/default.php έχεις ας πουμε τα δεδομένα σου σε μια μεταβλητή που λέγετε $myData για να κάνεις ότι θες.

Άβαταρ μέλους
limitCracker
Δημοσιεύσεις: 20
Εγγραφή: 28 Ιουν 2013 23:00
Επικοινωνία:

Κλήση Virtuemart κλάσης μέσω του helper.php ενός Joomla module?

Δημοσίευση από limitCracker » 12 Ιούλ 2013 20:28

Την έκανα extend γιατί ήθελα να βάλω και μια print μέσα και γιατί σκέφτηκα μήπως υπάρχει κάποιος τρόπος να κάνω τις μη static methods της VirtueMartModelCategory να είναι static στην subclass μου για να τις χρησιμοποιώ πιο εύκολα.
Επίσης ήθελα μετά πχ να κάνω extend και την JTree class αλλά δεν ήθελα να τις έχω όλες τις κλάσεις σε ένα αρχείο και αναρωτιόμουν πχ αν υπάρχει κανας φάκελος που να βάζεις helper κλάσεις.

Αυτό με το ΜVC που είπα όντως ακούγεται βλακεία τώρα που το ξανσκέφτομαι.

Άρα ανακεφαλαιώνοντας θα ήθελα να μάθω πως μπορώ να βάλω helper κλάσεις σε πολλά αρχεία σε ένα module.
και
πως μπορώ να καλέσω τις μη static methods της VirtueMartModelCategory μέσα από το helper.php χωρίς να χρειάζεται να κάνω instantiate objects.

Δλδ θέλω τον κώδικά μου παρακάτω να τον κάνω να χρησιμοποιεί την VirtueMartModelCategory::hasChildren, getParentCategoory κλπ κλπ. Αλλά καλώντας τις μέσω κλάσης όχι μέσω object.


helper.php:

Κώδικας: Επιλογή όλων

<?php
	defined &#40;'_JEXEC'&#41; or  die&#40;'Direct Access to ' . basename &#40;__FILE__&#41; . ' is not allowed.'&#41;;

	if &#40;!class_exists &#40;'VmConfig'&#41;&#41; &#123;
		require&#40;JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_virtuemart' . DS . 'helpers' . DS . 'config.php'&#41;;
	&#125;
	VmConfig&#58;&#58;loadConfig &#40;&#41;;
	// Load the language file of com_virtuemart.
	JFactory&#58;&#58;getLanguage &#40;&#41;->load &#40;'com_virtuemart'&#41;;
	
class mod_vmpricefilt &#123;

    function hasChildren&#40;$categ_id&#41;&#123;
    	global $mainframe;
    	$vm_langu = JRequest&#58;&#58;getVar&#40;'vm_langu', 'en_gb'&#41;;

    	$db = &JFactory&#58;&#58;getDBO&#40;&#41;;
    	$sql = 	'SELECT * '. 
				'FROM `#__virtuemart_category_categories` AS cc '.
				'INNER JOIN `#__virtuemart_categories_'.$vm_langu.'` AS cgr '.
				'ON cgr.virtuemart_category_id = cc.category_child_id '.
				'WHERE category_child_id NOT IN &#40;SELECT category_parent_id FROM `#__virtuemart_category_categories`&#41; ';
		$db->setQuery&#40;$sql&#41;;
        $result=$db->loadObjectList&#40;&#41;;

        foreach &#40;$result as $finalCateg&#41;&#123;
        	if &#40;$finalCateg->virtuemart_category_id == $categ_id&#41;
        		return true;
        &#125;
        return false;
    &#125;
	
	function getMaxPrice&#40;&#41;&#123;
		global $mainframe;

        $db = &JFactory&#58;&#58;getDBO&#40;&#41;;
		$sql = 	'SELECT MAX&#40;product_price&#41; AS max_prod_price '.
				'FROM `#__virtuemart_product_prices` ';
		$db->setQuery&#40;$sql&#41;;
        $result=$db->loadObject&#40;&#41;;
        return $result;
	&#125;
	
	function getManufNames&#40;&#41;&#123;
        global $mainframe;
		$vm_langu = JRequest&#58;&#58;getVar&#40;'vm_langu', 'en_gb'&#41;;
		
        $db = &JFactory&#58;&#58;getDBO&#40;&#41;;
        $sql = 	'SELECT * '. 
				'FROM `#__virtuemart_manufacturers_'.$vm_langu.'` ';
		$db->setQuery&#40;$sql&#41;;
        $result=$db->loadObjectList&#40;&#41;;
        return $result;
    &#125;
	
	function getParentCategNames&#40;&#41;&#123;
		global $mainframe;
		$vm_langu = JRequest&#58;&#58;getVar&#40;'vm_langu', 'en_gb'&#41;;
		
        $db = &JFactory&#58;&#58;getDBO&#40;&#41;;
		$sql = 	'SELECT * '. 
				'FROM `#__virtuemart_category_categories` AS cc '.
				'INNER JOIN `#__virtuemart_categories_'.$vm_langu.'` AS cgr '.
				'ON cgr.virtuemart_category_id = cc.category_child_id '.
				'WHERE category_parent_id = 0 '.
				'ORDER BY cgr.category_name ';
		$db->setQuery&#40;$sql&#41;;
        $result=$db->loadObjectList&#40;&#41;;
        return $result;
	&#125;
	
	function getSubCategNames&#40;$parent_id, $lvl&#41;&#123;
		global $mainframe;
		$vm_langu = JRequest&#58;&#58;getVar&#40;'vm_langu', 'en_gb'&#41;;
		
		$lvl = $lvl + 1;
		$tabs = self&#58;&#58;tabIt&#40;$lvl&#41;;
		
        $db = &JFactory&#58;&#58;getDBO&#40;&#41;;
		$sql = 	'SELECT * '. 
				'FROM `#__virtuemart_category_categories` AS cc '.
				'INNER JOIN `#__virtuemart_categories_'.$vm_langu.'` AS cgr '.
				'ON cgr.virtuemart_category_id = cc.category_child_id '.
				'WHERE category_parent_id = '.$parent_id.' '.
				'ORDER BY cgr.category_name ';
		$db->setQuery&#40;$sql&#41;;
        $result=$db->loadObjectList&#40;&#41;;
		//return $result;
		
		if &#40;$result == NULL&#41;&#123; return; &#125;
		foreach&#40;$result as $subcateg&#41;&#123;
			if &#40;$subcateg == NULL&#41;&#123; continue; &#125;
			if &#40;self&#58;&#58;hasChildren&#40;$subcateg->virtuemart_category_id&#41;&#41;&#123;
				echo '<option value="'.$subcateg->virtuemart_category_id.'">'.$tabs.' '.$subcateg->category_name.'</option>';
			&#125;else&#123;
				echo '<option value="'.$subcateg->virtuemart_category_id.'" disabled>'.$tabs.' '.$subcateg->category_name.'</option>';
			&#125;
			self&#58;&#58;getSubCategNames&#40;$subcateg->virtuemart_category_id, $lvl&#41;;
		&#125;	
	&#125;
	
	function tabIt&#40;$lvl&#41;&#123;
		$tabs = '';
		for&#40;$i=0; $i<&#40;$lvl-1&#41;; $i++&#41;&#123;
			$tabs .= '. ';
		&#125;
		return $tabs;
	&#125;
	
&#125;

Απάντηση

Επιστροφή στο “Joomla! Extensions (Components, Modules, Plugins)”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης