Link to home
Start Free TrialLog in
Avatar of Ricky Nguyen
Ricky NguyenFlag for Australia

asked on

Joomla 3 - JFactory::getDocument()->countModules

Hi Experts,

Can you please help me understand why line8 isn't working?

What I'm trying to achieve is something similar to $this->countModules() in a non-index.php file.

Thanks
Rick

function topSpanSize(){

    
    // count modules in the top container

    $modCount=0;
    for($i=1; $i<=3; $i++){
        $module=JFactory::getDocument()->countModules('top-'.$i);
        if(!$module==0){  
            $modCount++;
        }
    }
     

    /* Calculate the span size based
     * on module count. e.g. If only 1 
     * module exist in the top-container 
     * then it should take up the whole row. 
     * i.e. span12  */

    if ($modCount<>0){
       $topSpanNum = 12/$modCount; 
    }
    else{
       $topSpanNum = 0;
    }
    
    return $topSpanNum;
}

Open in new window

Avatar of Ricky Nguyen
Ricky Nguyen
Flag of Australia image

ASKER

I was following this link here https://groups.google.com/forum/#!topic/joomla-dev-general/4qXKUV8ofrk. It isn't working for me. Any ideas?
Avatar of Steve Bink
What is happening when you try that code?  Have you tried dumping any of the variables to see what is being returned?

function topSpanSize(){
    // count modules in the top container
    $modCount=0;
    for($i=1; $i<=3; $i++){
        $x=JFactory::getDocument();     // <------------- what happens here?
        die(print_r($x,1));             // <------------- what happens here?
        $module=JFactory::getDocument()->countModules('top-'.$i);
        if(!$module==0){  
            $modCount++;
        }
    }
    /* Calculate the span size based
     * on module count. e.g. If only 1 
     * module exist in the top-container 
     * then it should take up the whole row. 
     * i.e. span12  */
    if ($modCount<>0){
       $topSpanNum = 12/$modCount; 
    }
    else{
       $topSpanNum = 0;
    }
    return $topSpanNum;
}

Open in new window

Thanks for posting routinet. As per your code above, when at line 5, $x variable of type JDocumentHTML is recognised. After line 6 it prints the following and dies:

 
JDocumentHTML Object ( [_links] => Array ( [http://localhost/joomla3_1/] => Array ( [relation] => canonical [relType] => rel [attribs] => Array ( ) ) ) [_custom] => Array ( ) [template] => alpha1_0 [baseurl] => /joomla3_1 [params] => JRegistry Object ( [data:protected] => stdClass Object ( ) ) [_file] => C:\xampp\htdocs\Joomla3_1/templates/alpha1_0/index.php [_template:protected] => [_template_tags:protected] => Array ( ) [_caching:protected] => [_html5:JDocumentHTML:private] => [title] => Home [description] => [link] => [base] => http://localhost/joomla3_1/index.php [language] => en-gb [direction] => ltr [_generator] => Joomla! - Open Source Content Management [_mdate] => [_tab] => [_lineEnd] => [_charset] => utf-8 [_mime] => text/html [_namespace] => [_profile] => [_scripts] => Array ( [/joomla3_1/media/system/js/mootools-core.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/joomla3_1/media/system/js/core.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/joomla3_1/media/system/js/caption.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/joomla3_1/media/jui/js/jquery.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/joomla3_1/media/jui/js/jquery-noconflict.js] => Array ( [mime] => text/javascript [defer] => [async] => ) [/joomla3_1/media/jui/js/bootstrap.min.js] => Array ( [mime] => text/javascript [defer] => [async] => ) ) [_script] => Array ( [text/javascript] => window.addEvent('load', function() { new JCaption('img.caption'); }); ) [_styleSheets] => Array ( [/joomla3_1/media/jui/css/bootstrap.min.css] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) [/joomla3_1/media/jui/css/bootstrap-responsive.min.css] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) [/joomla3_1/media/jui/css/bootstrap-extended.css] => Array ( [mime] => text/css [media] => [attribs] => Array ( ) ) ) [_style] => Array ( ) [_metaTags] => Array ( [http-equiv] => Array ( [content-type] => text/html; charset=utf-8 ) [standard] => Array ( [keywords] => [rights] => [author] => Super User ) ) [_engine] => [_type] => html )

Open in new window

When I run my original codes and it hits line 8. The module count = 0. This is incorrect as I am definitely sure the module count should equal to 3. When I test the codes with $this->countModules() on the index file. It gives the correct count.

The index.php file is currently pulling in an external file via:

require dirname(__FILE__) . '\php\htmlOutputFns.php';

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Steve Bink
Steve Bink
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
output as per above code:

count for top-1=0
count for top-2=0
count for top-3=0

Open in new window

Thanks... Stupid of me. I forgot to switch it on.