kutombawewe.net

Cómo mostrar el módulo en el área de componentes

A menudo necesito crear un elemento de menú que muestre un módulo en el área de componentes, sin ningún otro contenido.

La forma en que resuelvo esto es crear un nuevo artículo y agregar solo {loadposition mymodule} en el contenido del artículo. Luego creo un elemento de menú Artículo único para el artículo. Esto está bien para un solo módulo, pero ¿qué pasa si tengo 20 módulos diferentes que quiero mostrar de esta manera? Tendría que crear 20 módulos, 20 artículos (casi vacíos) y 20 elementos de menú.

¿Hay otras formas de mostrar un módulo (y nada más) en el área de componentes de una plantilla? ¿Trucos? Hacks? Ideas?

12
johanpw

He hecho esto creando una posición de módulo en la misma ubicación con el componente y verificando si hay un módulo en esta posición, luego lo visualizo, de lo contrario, vaya al componente:

Ejemplo de código:

<main id="content" role="main" class="main">
 <?php 
 if ($this->countModules('myposition')) 
   { ?>
     <jdoc:include type="modules" name="myposition" style="xhtml" />
 <?php } 
  else 
  { ?>
     <jdoc:include type="component" /> 
  <?php } ?>
</main>

Luego, cuando quiero mostrar un módulo en lugar de un componente en una página, creo que el módulo lo asigna a ese elemento del menú y listo.

Una pequeña nota al margen:

Para mayor comodidad y claridad, sugiero nombrar la posición de este módulo como "content-module", "main-module" o "compomodule". Cualquier cosa que recuerde que cualquier módulo colocado allí reemplazará la salida del componente.

9
FFrewin

Para mejorar las respuestas dadas aquí:

Para incluir una posición de módulo en su vista de componentes y cargar módulos allí, solo tiene que agregar

echo JHtml::_('content.prepare', '{loadposition yourmodulposition}');

al archivo de vista.

La segunda cadena con la etiqueta corta de posición de carga se puede reemplazar con una var que contiene más html si lo necesita. No tiene que escribir esa línea para cada nueva posición de módulo:

$outputModules = '<strong>Some Html</strong>'
                 .'{loadposition yourmodulposition1}'
                 .'{loadposition yourmodulposition2}';


echo JHtml::_('content.prepare', $outputModules);

(Sé que esta no es una respuesta directa a la pregunta de los autores).

8
Dennis Heiden

Aquí hay una solución simple y funcional. He intentado con jdoc: include pero no funcionó.

 $ document = JFactory :: getDocument (); 
 $ renderer = $ document-> loadRenderer ('modules'); 
 $ position = 'custompositionname'; 
 $ options = array ('style' => 'raw'); 
 echo $ renderer-> render ($ position, $ options, null); 
2
user2589739

Crea un artículo en blanco.

Crear elemento de menú seleccionando el artículo que creó.

Cree el módulo en una posición no utilizada, configure la asignación del menú solo en las páginas seleccionadas, seleccione solo el elemento del menú de arriba.

Como esto estaba en la parte superior, pensé que daría mi respuesta, esto es lo que hago.

0
Mythic

Prueba esto

jimport('joomla.application.module.helper');
    // this is where you want to load your module position
    $modules = JModuleHelper::getModules('header'); 
    foreach($modules as $module)
    {
    echo JModuleHelper::renderModule($module);
    }

ref: https://stackoverflow.com/questions/12225538/how-we-include-a-joomla-module-in-a-component-view-in-joomla

0
Sh4msi

La forma más limpia de hacer esto es mediante: http://extensions.joomla.org/extension/m2c-module-to-component

0
Lala

Tuve que hacer lo mismo en mi sitio para demostraciones de extensión y botones de descarga, sin embargo, para ser sincero, creo que mantener las cosas separadas es de alguna manera mejor, ya que es más fácil de administrar. No solo estoy bastante seguro de que no hay forma de lograr lo que estás buscando a través del CMS real, solo el código duro (no digas más).

0
Lodder

En primer lugar, según su pregunta, ya está creando 20 módulos y 20 elementos de menú, por lo que realmente lo único que tiene que hacer es crear un elemento de contenido de una línea para cada módulo. Si eso es realmente oneroso, entonces adelante con la idea de @FFrewin. Es un poco hacky, pero funcionará.

Personalmente, iría con los elementos de contenido. De hecho, lo hice cuando estaba creando un sistema con cuadros de diálogo emergentes que también quería que funcionara sin js habilitado. Puse el contenido del cuadro de diálogo en un módulo custom_html, manipulé el módulo para que fuera revelado y colocado cuando se hizo clic en un enlace. Y luego también apunté el enlace a un elemento de contenido, incluido el módulo como usted describió. Si js estaba habilitado, no se siguió el enlace y se reveló el cuadro de diálogo. Si js estaba deshabilitado, se siguió el enlace y el contenido del diálogo se mostró como contenido. Y el contenido estaba en un solo lugar, así que no mantenía dos copias separadas del contenido.

0
Arlen