Cambiar Background de la plantilla joomla para cada sección

1 06 2011

Les traigo este toturial para poder modificar el background de la plantilla joomla en las secciones que ustedes quieran así pueden generar sitios con fondos de distintos colores o con distintas imágenes y agregarle dinamismo al sitio.

Primer paso Para poder comenzar, debemos saber en que item del menu estamos posicionados, para esto usaremos la variable $Itemid ,que en el caso de la portada es 1, entonces definimos como se ve a continuación la variable en el en le Header del index.php: global $Itemid; Una vez que declaramos la variable insertamos el siguiente código condicional para definir que clase de css usaremos dependiendo en que sección estemos.

if ($Itemid==1) { echo ('<body id="portada"'>'); //codigo de cabecera para el home } else{ echo ('<body id="otro"'>'); //codigo de cabecera para otras páginas }

Paso 2
A continuación les muestro el código CSS para que funcione perfecto. En la etiqueta Body van a poner todas las funciones especificas de la web en general y luego crearemos estiquetas con los nombres de las secciones para el codigo especifico de cada seccion.

body
{
margin: 0 auto;
padding: 0;
font-family: Arial, Helvetica, Sans-Serif;
font-style: normal;
font-weight: normal;
font-size: 14px;
}
#portada{
margin: 0 auto;
padding: 0;
background-color: #C7C7C7;
background-image: url('../images/page_t.jpg');
background-repeat: no-repeat;
background-attachment: fixed;
background-position: top center;
}
#otro{
margin: 0 auto;
padding: 0;
background-color: #C7C7C7;
background-image: url('../images/otro.jpg');
background-repeat: no-repeat;
background-attachment: fixed;
background-position: top center;
}

Noten que utilizamos para las etiquetas de las secciones el operador # , ya que luego le asignamos cada estilo con el campo ID del Body .
Les dejo imagenes de la web donde lo implemente asi ven como funciona, espero que les sirva!
Seccion1


Acciones

Información

36 respuestas

13 06 2011
john

Muchas gracias, estoy intentando hacer lo mismo pero me da error, el index.php al q hace referencia es el del raiz del sitio o el q se encuentra en la carpeta de la plantilla, yo lo ubique en este ultimo pero no me funciona…marca error en:

linea 88.

13 06 2011
brunogelman

Hola John, el archivo index.php en el que se debe modificar es el que se encuentra en la plantilla de joomla, si podes dame mas datos sobre el error que te da, o mostrame el codigo que estas usando, asi te puedo ayudar mejor !

Espero tus comentarios

Saludos
Ing. Gelman Bruno
Netrails Diseño Web

20 04 2012
Omar

Ing. Gelman Bruno buenas tardes, estoy interesado en este tema debido a que tengo un cliente al que le estoy haciendo una web y quiere que le cambie el fondo en cada articulo, justo lo que dice en este tutorial, funciona también con joomla 2.5?
Me podrías ayudar, no manejo muy bien php.
Gracias de antemano.

Omar Macias Arevalo

24 04 2012
brunogelman

Buenos días Omar

Hasta donde yo se supongo que debe funcionar, yo lo utilice en Joomla 1.5 , todavía no he utilizado joomla 2.5 así que no sabría decirte bien si ah cambiado algo como para que este script deje de funcionar. pero cualquier cosa lo vemos

espero te sirva!
Bruno

13 06 2011
brunogelman

De nada John! Un gusto! y me alegro que te haya servido! Abrazo

Ing. Gelman Bruno
Netrails Diseño Web

13 06 2011
john

Gracias Gelman por responder tan pronto.

Creo que el problema esta en la sgte instruccion:

echo (”);

Al colocarla el resto de codigo queda comentareado e intento acomodarla
pero no funciona.

El index.php de la plantilla:

<?php
defined('_JEXEC') or die('Restricted access'); // no direct access
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php';
$document = null;

global $Itemid;

if($Itemid==7)
{
<?php
echo ('’);
?>
}

el archivo template.css

body
{
margin: 0 auto;
padding: 0;
color: #0D1216;
background-image: url(‘../images/Bottom_texture.jpg’);
background-repeat: repeat-x;
background-attachment: fixed;
background-position: top left;
}
#hoja
{
margin: 0 auto;
padding: 0;
color: #0D1216;
background-image: url(‘../images/Bottom_texture2.jpg’);
background-repeat: repeat-x;
background-attachment: fixed;
background-position: top left;
}

13 06 2011
brunogelman

Esto es lo deberías poner para que funcione, no esta asignandoles el id al Body, por eso te salta el error

probalo y avisame cualquier cosa


if($Itemid==7)
{
<?php
echo ('’);
?>
}
elseif ($Itemid==50 ){
echo (' ');


Saludos
Gelman Bruno

13 06 2011
john

Gelman, muchas gracias, ya me funciono justamente como lo necesitaba. Muy agradecido por el aporte y por el soporte…jeje.

14 06 2011
Avyq

Genial, me ha venido perfecto. Limpio, sencillo y eficiente. Gracias!

15 06 2011
brunogelman

Gracias por tu comentario! Saludos y éxitos!

5 10 2011
Ramiro

Hola amigos, quiero hacer lo mismo y no he podido, quisieran saber si es el index que se encuentra dentro de la carpeta templates de mi sitio joomla el que debo midificar. Gracias

5 10 2011
brunogelman

Hola Ramiro, si ese archivo es en el que debes hacer las modificaciones , cualquier otra consulta avisame , saludos

19 10 2011
greserg

Hola de nuevo. Escribí anteriormente para darte las gracias, pero al comprobar el funcionamiento en IE7 veo que me descentra la página, es decir, lo tengo todo centrado y al poner el texto en IE se alinea todo a la izquierda. Si elimino el código se vuelve a centrar. No comprendo por qué puede pasar esto, tampoco comprendo por que IE da tantos problemas…
El código lo tengo pegado justo después de esta línea:
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . ‘functions.php’;
y estas son las líneas de código:
$document = null;
global $Itemid;
if ($Itemid==1) { echo (”);} //codigo de cabecera para el home
if ($Itemid==54) { echo (”);} //codigo de cabecera para el home

19 10 2011
brunogelman

Hola ! con que código estas centrando la pagina ? yo por lo general uso después del body eso centra cualquier cosa jaja , si eso no funciona mostrame como lo haces así te puedo ayudar

saludos
Bruno

13 11 2011
greserg

Disculpa que no haya respondido antes. Lo he retomado de nuevo pero no encuentro el problema en IE. Centro con css margin:0 auto; en el div que comprende al contenido. Trabajo en local. Voy a intentar subir el sitio a un servidor para que puedas ver el code.

Te aviso en cuanto lo tenga subido y te doy una dirección a ver si me puedes ayudar por que estoy seguro que es una tontería en algún css, pero IE me trae de cabeza…

Saludos,

14 11 2011
greserg

Hola de nuevo. Lo he subido a un servidor. (http://goyo.site90.com/) Tanto en Firefox como en Chrome se ve el contenido centrado en la página. En IE pierde el centro y queda todo a la izquierda. Si quito el código:
$document = null;
global $Itemid;
if ($Itemid==1) { echo (”);} //codigo de cabecera para el home
if ($Itemid==27) { echo (”);} //codigo de cabecera para el home
if ($Itemid==2) { echo (”);} //codigo de cabecera para el home
se centra también el IE pero pierdo el poder poner las imágenes de fondo para cada menú.

24 11 2011
brunogelman

Hola Greserg

Disculpa la demora! va bien la web! la forma que tenes que probar para resolver es usar la etiqueta que va funcionar para todos los navegadores seguro! de la siguiente manera y no tendrías que tener mas problemas! De paso te recomiendo usar fuentes color blanco o algo que corte con los colores oscuros del fondo así se ven mejor los textos!

Abrazo y espero que te funcione!

25 11 2011
brunogelman

Buen día

La solución que te pase, en teoría debería resolver tu problema con IE7 ya que es una etiqueta que permite centrar todo el contenido por eso te puse un ejemplo para que te guíes de como ponerlo, vi el código, pero igual no puedo ver el código fuente, veo el html que se genera nomas, así que desde acá lo único que se me ocurre que puede resolver el problema es la etiqueta o si no fijate en el css si setear el margen del body para que centre la pagina, capas cada vez q cambia se desconfigura el margin y por eso se alinea al costado

Abrazo
Bruno

13 03 2012
JUNIOR

GENIAL EL CÓDIGO MUCHAS GRACIAS ME SIRVIÓ MUCHO

24 04 2012
Carlos

He estado siguiendo el hilo, funciona correctamente en firefox y chrome. Qué es lo que se tiene que modificar para que se vuelva a centrar el contenido usando IE??

Un saludo!!

24 04 2012
brunogelman

buenos días Carlos, para centrarlo en explorer yo utilice la etiqueta luego del y con eso lo resolví bien, cualquier cosa me avisas

Salduos
Bruno

25 04 2012
Carlos

Cuendo mencionas “luego del”, a que etiqueta te refieres, la del body??

Gracias!

25 04 2012
brunogelman

Claro quedaria asi

contenido del sitio web…

Saludos
Bruno
<

25 04 2012
CArlos

Hola Otra vez,

No logro hacerlo bien y en IE se sigue viendo desplazado.
Te pongo el código de mi index de la template.

// no direct access
defined ( ‘_JEXEC’ ) or die ( ‘Restricted access’ );

/*——————CAMBIAR FONDO EN CADA SECCIÓN——–(Carlitos)————–*/

global $Itemid;
$Itemid=$_GET['Itemid'];

if ($Itemid==543)
{ echo (”);
}
elseif ($Itemid==233) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
elseif ($Itemid==10000) {
echo (”);
}
else {
echo (”);
}

if (class_exists(‘T3Template’)) {
$tmpl = T3Template::getInstance();
$tmpl->setTemplate($this);
$tmpl->render();
return;
} else {
//Need to install or enable JAT3 Plugin
echo JText::_(‘MISSING_JAT3_FRAMEWORK_PLUGIN’);
}

Gracias otra vez por la ayuda!!

2 05 2012
brunogelman

lo que deberías poner es lo siguiente

if ($Itemid==543)
{ echo (‘
‘);
}
elseif ($Itemid==233) {
echo (‘
‘);
}

donde id=”contacto” es la clase donde definis que clase de css haces referencia y cambias el fondo, Ej:

#portada{
margin: 0 auto;
padding: 0;
background-color: #C7C7C7;
background-image: url(‘../images/page_t.jpg’);
background-repeat: no-repeat;
background-attachment: fixed;
background-position: top center;
}

y acordarte de cerrar la etiqueta al antes del body del final del template

Espero que te ayude

SAludos
Bruno

2 05 2012
menanti

Hola, el tutorial es gusto lo que estoy buscando. he intentado realizarlo pero no lo he logrado. creo que no entiendo bien los dos primeros pasos, he de decir que no controlo casi nada de php. no sé si se podría ser más explícito. muchas graias de antemano

2 05 2012
brunogelman

Hola

Los dos primeros pasos son bien simples, en el primero defines una variable que será la que tendrá en cuenta en que sección te encuentras y después define el if con el cual definirás que clase del CSS usaras para mostrar la plantilla de la pagina. analizalo tranquilo veras que es simple
En el segundo paso lo que haces es definir las clases de css para cada sección, en donde defines la imagen de background que vas a usar para cada una.

espero te sirva, cualquier cosa seguime preguntando y vemos como lo arreglamos

Abrazo
Bruno

4 05 2012
Fran

hola Bruno, lo primero gracias por tu amalidad y rapidez.
sé que esto también lo puedo hacer con copias de plantillas modificadas según sección, pero me parece mejor este método. No he comentado que estoy trabajando con la versión 2.5.4. vamos a ir paso a paso a ver si me entero.

1. la variable itemid,dices de colocarla en el header, pero lo que tiene el index.php es head, que es donde yo lo he colocado en la primera línea despues del .¿es correcto?. por otro lado, para saber qué número corresponde a cada categoría/item ¿cómo lo sabemos por el id del ítem de menu, como sabes tú que a la portada le corresponde un 1?

2.el codigo condicional que se usa ¿qué se pone a continuación de lo anterior, es decir qué quedaría así?

global $Itemid; if ($Itemid==1) { echo (”); //codigo de cabecera para el home } else{ echo (”); //codigo de cabecera para otras páginas }

3.el paso tres lo hacemos en una css aparte asociada/vinculada al index.php?, y si es dentro del index.php, ¿dónde van?

no Entiendo nada de php y eso se nota
Muchísimas gracias de antemano

11 05 2012
brunogelman

Se puede hacer en el mismo archivo php, pero siempre es mejor hacerlo por separado por una cuestión de mantenibilidad del sitio a futuro, pero en el paso 3 lo único que te resta es hacer una clase para cada sección con un background image en cada clase q definirá la imagen de fondo

Disculpa la demora!

Espero te sirva!

Bruno

4 05 2012
Fran

me auto respondo en el primer y segundo punto.
1.Entiendo que global $itemid va en el head. El número del item es el id de hecho itemid es la mewzcla de item + id
2.creo que en el segundo punto estoy en lo cierto.
lo que sigo sin tener claro es el punto 3
gracias de nuevo

4 05 2012
Fran

en el punto 1, no entiendo que hay que poner en “codigo cabecera para el home”

11 05 2012
brunogelman

en código cabecera para el home deberías poner “” entonces vos ahí le asignas la clase portada al body

Saludos

10 05 2012
Francisco

Para el Joomla 2.5:

<?php
global $Itemid;
$Itemid=$_GET['Itemid'];

if ($Itemid==101){ echo ('’); }
elseif ($Itemid==102){echo (”); }
elseif ($Itemid==103){echo (”); }
elseif ($Itemid==104){echo (”); }
elseif ($Itemid==105){echo (”); }
elseif ($Itemid==106){echo (”); }
else {echo (”); }
?>

11 05 2012
brunogelman

Gracias por tu aporte!

25 05 2012
Alexander Hoyos Boresoff

Saludos y mil gracias por estas instrucciones. si no tengo conocimientos muy profundos en php podría hacer esto? esque estoy un poco enredado porque no entiendo como hacer para que por codigo me identifique que yo quiero ponerle un fondo x a una sección. por ejemplo la sección llamada “puntoTV”, que debo tener en cuenta? por favor te pido ayuda. esta es la pagina raíz http://www.telecafe.tv/site/ y esta seria a la que le quiero cambiar el fondo http://www.telecafe.tv/site/index.php?option=com_content&view=category&id=58:puntotv&Itemid=194&layout=default

28 05 2012
brunogelman

Buen día ALexander, no hace falta que sepas mucho de php para implementar eso, solo debes entender que joomla siempre tiene un itemId para cada articulo, que se esta mostrando en la pantalla en ese momento y al declarar la variable $ItemId en el codigo puedes tomar la varible del articulo que esta abierto en ese momento, en el caso de articulo que quieres abrir vos es “Itemid=194″ asi que si usas
if ($Itemid==194) { echo ('<body class="ClaseCss" );} //codigo de cabecera para el home

y defines en tu hoja de css la ClaseCss con el background-image que quieras cambiara cuando entres en esa sección

Exitos! y esta muy buena tu pagina

Saludos
Bruno

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.

Únete a otros 60 seguidores