it-swarm-es.tech

Detectar estilo de plantilla actual

Estoy construyendo un sitio web con una plantilla pero varios estilos. Necesito que cada estilo tenga su propio logotipo y un enlace personalizado para el logotipo. La plantilla se basa en el Marco de pórtico.

¿Es posible detectar el estilo de plantilla actual (nombre o ID) y usar un if-else declaración en el archivo index.php? Esto es más o menos lo que estoy tratando de hacer:

<?php
  if (styleid = "1") {
    $link = "/";
    $logo = "logo1.jpg";
  } elseif (styleid = "2" {
    $link = "/otherlink";
    $logo = "logo2.jpg";
  }
  echo '<a href="'.$link.'"><img src="/images/'.$logo.'"></a>';
?>
2
johanpw

Con Gantry, puede tener logotipos diferentes para cada estilo. Pero esto no le permitirá tener enlaces diferentes.

Aunque puede haber varios enfoques para lograr lo que supongo que tiene en mente, para responder directamente a su pregunta sobre cómo asignar el estilo de plantilla a un elemento del menú, puede usar algo como esto:

Obteniendo estilo de plantilla:

$styleId = JMenu::getInstance('site')->getActive()->template_style_id;

Esto devolverá la ID del estilo asignado en el menú activo. Tenga en cuenta que el estilo predeterminado devolverá 0.

He probado esto en una plantilla de pórtico y parece funcionar.


Un segundo enfoque

Usando Marco de pórtico para crear plantillas personalizadas, puede agregar una configuración adicional (campo de elemento personalizado para extender la función del logotipo) en la administración de la plantilla, para el enlace personalizado del logotipo.

Entonces, todo lo que necesita hacer es agregar un campo adicional en el archivo template_options.xml y obtener este valor en el índice de su plantilla, y traducirlo a un enlace. Puede usar un campo de elementos de menú o un campo de base de datos para consultar los enlaces de elementos de menú, por lo que facilitará al usuario seleccionar un enlace interno del sitio a otro elemento de menú.

Tu comentario sobre el tema:

Probé su segundo enfoque y creé un campo personalizado en templateOptions.xml como este: Pero cuando trato de usar el valor en features/logo.php, está vacío: $ customlink = $ gantry-> get ('customlogo') ; ($ customlink no contiene datos). ¿Algunas ideas?

Responder:

templateOptions.xml tiene el siguiente código para la función de logotipo:

<fields name="logo" type="selectedset" label="LOGO" description="LOGO_DESC">
    <field name="enabled" type="toggle" default="1" label="SHOW" />
    <field name="position" type="position" translation="false" default="header-a" label="POSITION" />
    <field name="type" type="selectbox" selector="true" default="gantry" label="TYPE" isbodyclass="true" setbyurl="true" setinsession="true" setbysession="true" setincookie="true" setbycookie="true"/>
    <fields type="set" name="gantry" label="Gantry Template">
    </fields>
    <fields type="set" name="custom" label="CUSTOM">
        <field name="image" type="imagepicker" default="" label="LOGO_PICKER" description="LOGO_PICKER_DESC" setinsession="true" setbysession="true" setincookie="true" setbycookie="true" />
    </fields>
</fields>

¿Es muy probable que haya agregado su campo personalizado dentro del <fields - groups> Más profundo?

Noté que si agrega un campo personalizado de esta manera, entonces no es accesible en la característica.php con la $this->get('fieldname').

Por lo tanto, debe agregar el campo personalizado como se muestra a continuación:

<fields name="logo" type="selectedset" label="LOGO" description="LOGO_DESC">
    <field name="enabled" type="toggle" default="1" label="SHOW" />
    <field name="position" type="position" translation="false" default="header-a" label="POSITION" />
    <field name="type" type="selectbox" selector="true" default="gantry" label="TYPE" isbodyclass="true" setbyurl="true" setinsession="true" setbysession="true" setincookie="true" setbycookie="true"/>
    <fields type="set" name="gantry" label="Gantry Template">
    </fields>
    <fields type="set" name="custom" label="CUSTOM">
        <field name="image" type="imagepicker" default="" label="LOGO_PICKER" description="LOGO_PICKER_DESC" setinsession="true" setbysession="true" setincookie="true" setbycookie="true" />
    </fields>
    <field name="mylogolink" type="text" default="" label="logo link" description="logo link" />
</fields>

Entonces, probablemente podrá acceder a través de $this->get('mylogolink');

1
FFrewin

Esto es solo una idea y sé que no responde directamente a su problema de codificación, pero qué pasaría si usara NoNumbers Advanced Module Manager para crear un módulo separado para cada plantilla.

¿Entonces podría asignar ese módulo específico a su plantilla correspondiente? A través del área de configuración de administración de AMM.

Sin embargo, significa que tendría que crear un módulo diferente (URL, etc.) para cada plantilla, pero eso no debería ser demasiado trabajo ya que simplemente podría duplicar cada módulo.

2
jonboy

En caso de que alguien esté interesado, así es como poner todo junto:

En el archivo templateOptions.xml Agregué este código (como lo sugirió FFrewin):

<field name="mylogolink" type="text" default="" label="logo link" description="logo link" />

Luego en /features/logo.php, reemplace esto:

<div class="rt-logo-block">
    <a href="<?php echo $gantry->baseUrl; ?>" id="rt-logo"></a>
</div>

Con este:

<div class="rt-logo-block">
   <a href="<?php echo ($customlink != "" ? $this->get('mylogolink') : $gantry->baseUrl;) ?>" id="rt-logo"></a>
</div>

Simplemente comprueba si $ customlink está vacío o no. Si está vacío, se usa el enlace de inicio predeterminado; de lo contrario, se usa el enlace dado.

1
johanpw