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

13

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ú de 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?

johanpw
fuente
Puede que te resulte útil en Joomla! 3 para usar el botón del editor que crea un módulo para usted. Eso lo haría rápido y menos propenso a errores.
Eoin el

Respuestas:

10

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:

Código de muestra:

<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 mayor claridad, sugiero nombrar esta posición del módulo como "content-module", "main-module" o "compomodule". Cualquier cosa que recuerde que cualquier módulo colocado allí reemplazará la salida del componente.

FFrewin
fuente
1
Esta es la solución ideal. Muchas plantillas comerciales tienen un cambio de parámetro en su configuración del lado del administrador, pero si no está utilizando una de esas plantillas comerciales ... esta es la respuesta más eficiente y elegante.
Toni Marie el
1
Me encanta esta idea, es simple y efectiva, y fácil de implementar en las plantillas existentes. Excelente.
johanpw
9

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).

Dennis Heiden
fuente
2

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

    $ document = JFactory :: getDocument ();
    $ renderer = $ document-> loadRenderer ('módulos');
    $ position = 'custompositionname';
    $ opciones = matriz ('style' => 'raw');
    echo $ renderer-> render ($ posición, $ opciones, nulo); 
usuario2589739
fuente
Explique más cómo se puede usar el código anterior para lograr el resultado deseado como se describe en la pregunta.
FFrewin
En la copia de seguridad, cree un nuevo módulo y establezca su posición (por ejemplo, nombre de posición personalizado) y publíquelo. En la interfaz, agregue el código anterior y funcionará sin problemas.
user2589739
0

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).

Lodder
fuente
0

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 tan 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 construyendo 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 se revelara y colocara 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 cuadro de diálogo se mostró como contenido. Y el contenido estaba en un solo lugar, así que no mantenía dos copias separadas del contenido.

Arlen
fuente
0

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.

Mítico
fuente