Aida
Aida

Reputation: 11

how can I load a joomla module as a link?

this is my problem...

I have some of images and links that I want to load different joomla modules when user click on them.

mean each hyperlink can load another module|position

thanks all

Upvotes: 1

Views: 1403

Answers (1)

emmanuel
emmanuel

Reputation: 9615

In case that you just want to call a module's content from a url the following answer will help you.

If you just want to show / hide a module in the same page you could use something similar to my previous answer: Joomla 3 Show different modules on same position depending on toggler

Joomla provides the functionality to call a specific file of the active template by adding the tmpl=FILENAME key/value to the url's query string. All built-in templates have a component.php file if user wants to load the template with the component only. You could check the following link for more details: Adding print pop-up functionality to a component.

You could do something similar to only show the modules that you want to load. You could copy the component.php to a new file (I have used custom.php) and added the following php code in the <body> ... </body> part.

<?php
    $jinput = JFactory::getApplication()->input;
    $selectedPosition = $jinput->getString("position", "");
    $selectedModule = $jinput->getString("module", "");
    $selectedModuleTitle = $jinput->getString("title");

    if($selectedPosition !== "") {
        $modules = JModuleHelper::getModules($selectedPosition);
        foreach ($modules as $module) {
            echo JModuleHelper::renderModule($module);
        }
    } elseif ($selectedModule !== "") {
        $module = JModuleHelper::getModule($selectedModule, $selectedModuleTitle);
        echo JModuleHelper::renderModule($module);
    }
?>

So with a similar way as loadposition / loadmodule works you could call the new template file using:

index.php?tmpl=custom&position=MODULE_POSITION

or

index.php?tmpl=custom&module=MODULE_TYPE

or

index.php?tmpl=custom&module=MODULE_TYPE&title=MODULE_TITLE

Optionally if you want to load the module with a specific style, you could pass it to the second paramter of the renderModule method like:

echo JModuleHelper::renderModule($module, array("style" => "xhtml"));

Hope this helps

Upvotes: 1

Related Questions