Search code examples
phpjoomlamodulepositionconditional-statements

Conditional Joomla module position and span


I am having trouble setting up a joomla conditional module position and span. Although I understand HTML, I have trouble with php. According to the tutorials, I have to add

<?php if ($this->countModules( 'user1' )) : ?>
  <div class="user1">
    <jdoc:include type="modules" name="user1" style="rounded" />
  </div>
<?php endif; ?>

Although when I add something like it, I receive an error.

The code that I want to change is:

 <?php
//no direct accees
defined ('_JEXEC') or die('resticted aceess');

class Helix3FeatureTitle {

    private $helix3;

    public function __construct($helix){
        $this->helix3 = $helix;
        $this->position = 'title';
    }

    public function renderFeature() {

        $app        = JFactory::getApplication();
        $menuitem   = $app->getMenu()->getActive(); // get the active item

        if($menuitem) {

            $params     = $menuitem->params; // get the menu params

            if($params->get('enable_page_title', 0)) {

                $page_title          = $menuitem->title;
                $page_title_alt      = $params->get('page_title_alt');
                $page_subtitle       = $params->get('page_subtitle');
                $page_title_bg_color = $params->get('page_title_bg_color');
                $page_title_bg_image = $params->get('page_title_bg_image');

                $style = '';

                if($page_title_bg_color) {
                    $style .= 'background-color: ' . $page_title_bg_color . ';';
                }

                if($page_title_bg_image) {
                    $style .= 'background-image: url(' . JURI::root(true) . '/' . $page_title_bg_image . ');';
                }

                if( $style ) {
                    $style = 'style="' . $style . '"';
                }

                if($page_title_alt) {
                    $page_title      = $page_title_alt;
                }

                $output = '';

                $output .= '<div class="sp-page-title"'. $style .'>';
                $output .= '<div class="container" id="pagetitle">';
                                $output .= '<div class="row">';
                                $output .= '<div class="col-md-6 col-sm-8">';
                $output .= '<h1>'. $page_title .'</h1>';

                if($page_subtitle) {
                    $output .= '<p class="lead">'. $page_subtitle .'</p>';
                }
                $output .= '</div>';

                                $output .= '<div class="col-md-6 col-sm-4 hidden-xs">';
                                $output .= '<jdoc:include type="modules" name="datetime" style="none" />';
                                $output .= '</div>';

                $output .= '</div>';
                $output .= '</div>';
                                $output .= '</div>';

                return $output;

            }

        }

    }    
}

and what I want to do is tell the template that when the module position 'datetime' is empty, the "title" position should have 12span and be "text-center". Otherwise if module position 'datetime' has a module, the 'title' position should have 6span and be "text-left".

I have tried different methods and I receive different errors each time. This is why I did not mention a spcecific error. For example, if I use this method:

if($this->countModules('datetime')) { $output .= '<div class="col-md-6 col-sm-4 hidden-xs">'; $output .= '<jdoc:include type="modules" name="datetime" style="none" />'; $output .= '</div>'; };

I receive the following error:

Fatal error: Call to undefined method Helix3FeatureTitle::countModules() in ... 

I would really appreciate some assistance. Thank you.


Solution

  • The problem is that you are trying to us countModules() in a place where it isn't going to work because that method is from a different class.

    From the looks of it what this method is doing is generating the Joomla template.

    So what you can do is

      $output .="<?php if ($this->countModules( 'user1' )) : ?>";
           $output .= '<div class="col-md-6 col-sm-4 hidden-xs">';
    
              $output .= '<jdoc:include type="modules" name="datetime" style="none" />';
    
            $output .= '</div>';
      $output .= '<?php endif; ?>';
    

    So that it will generate the code for the condition. I haven't tested because I don't have the class you are using but it should work.

    Updated to fix quoting.