Problema/duda con include/include_once

Estado
No está abierto para más respuestas.

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Buenas,

veréis, estoy haciendo un slider con JS que viene definido según que página se visite por PHP en mi blog de Wordpress, explico como lo estoy haciendo y cual es el problema:

En mi header PHP tengo llamo a una función:

PHP:
    <section id="slider">
        <?php echo slider_cabecera();?>
    </section>

En functions.php creo la función:

PHP:
    function slider_cabecera($imgs) {

        if ( is_home() ) {
            $tmp = include_once( TEMPLATEPATH. '/inc/slider-home.php' );
        } elseif ( is_page_template('contacto.php') ) {
            $tmp = include( TEMPLATEPATH. '/inc/slider-contacto.php' );
        } elseif (is_page_template('acerca.php')) {
            $tmp = include( TEMPLATEPATH. '/inc/slider-acerca.php' );
        } else {
            $txt = "<div class='texto'>$pagename</div>";
        }

        $imgs = (!$txt) ? $tmp : $txt;

        return $imgs;

    }

Nota: Ya se que la función se puede hacer más simple definiendo la variable $imgs desde el principio, pero es que lo tengo así porque empecé a hacer algo más complicado y después cambié de idea.

Nota2: La variable $pagename devuelve texto, está definida más arriba.

Nota3: Cada slider-loquesea.php contiene simple HTML

El problema, bien sea con include o include_once, es que me aparece un uno (1) sin saber de donde sale, por ejemplo si en mi slider-home.php tengo algo así:

Código:
<div id="1">algo</div>
<div id="2">algo2</div>
<div id="3">algo3</div>

En la página principal dento de section #slider me aparece algo así:

HTML:
algo
algo2
algo3
1

La solución al uno es fácil, en vez de un include lo hago con la función de Wordpress get_template_part(), tal que así:

PHP:
if ( is_home() ) {
            $tmp = get_template_part( 'inc/slider', 'home' );
        } elseif ( is_page_template('contacto.php') ) {
            $tmp = get_template_part( 'inc/slider', 'contacto' );
        } elseif (is_page_template('acerca.php')) {
            $tmp = get_template_part( 'inc/slider', 'acerca' );
        } else {
            $txt = "<div class='texto'>$pagename</div>";
        }

Pero la solución no me basta, ¿por qué me aparece un uno?

Saludos
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
La unica diferencia entre include e include_once es que este ultimo no vuelve a incluir el fichero si ya ha sido incluido previamente, evitando incluir y evaluar dos veces el mismo codigo.

En casos como estos siempre viene bien tirar de echo y print_r para hacer un poco de debug, se puede solucionar casi cualquier error así.

Así todo, estaria bien saber si dentro del div #slider el dichoso "1" aparece dentro del "<div class='texto'>$pagename</div>"; o fuera. Si está dentro, puede que $pagename en algun momento obtenga un valor int 1, habria que ver en punto y de que manera obtiene su valor.

Si está fuera del div, puede que ese 1 se produzca fuera del if(is_home()), pero no pusiste que viene debajo.
 

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
La unica diferencia entre include e include_once es que este ultimo no vuelve a incluir el fichero si ya ha sido incluido previamente, evitando incluir y evaluar dos veces el mismo codigo.

En casos como estos siempre viene bien tirar de echo y print_r para hacer un poco de debug, se puede solucionar casi cualquier error así.

Así todo, estaria bien saber si dentro del div #slider el dichoso "1" aparece dentro del "<div class='texto'>$pagename</div>"; o fuera. Si está dentro, puede que $pagename en algun momento obtenga un valor int 1, habria que ver en punto y de que manera obtiene su valor.

Si está fuera del div, puede que ese 1 se produzca fuera del if(is_home()), pero no pusiste que viene debajo.

Si, lo primero lo sabía, pero lo ponía por si tenía algo que ver, no me acabé de explicar correctamente... se supone que get_template_part() de WP es algo similar a un include_once pero no me muestra el error al contrario que con include_once.

Probaré lo de print_r, que este fin de semana no he podido, en cuanto a lo de if(is_home()) es una función de Wordpress que detecta si es la página principal, y en ese caso muestro el template que quiero para la página principal.

Ya mañana digo algo, gracias! ;)

- - - Actualización- - -

La unica diferencia entre include e include_once es que este ultimo no vuelve a incluir el fichero si ya ha sido incluido previamente, evitando incluir y evaluar dos veces el mismo codigo.

En casos como estos siempre viene bien tirar de echo y print_r para hacer un poco de debug, se puede solucionar casi cualquier error así.

Así todo, estaria bien saber si dentro del div #slider el dichoso "1" aparece dentro del "<div class='texto'>$pagename</div>"; o fuera. Si está dentro, puede que $pagename en algun momento obtenga un valor int 1, habria que ver en punto y de que manera obtiene su valor.

Si está fuera del div, puede que ese 1 se produzca fuera del if(is_home()), pero no pusiste que viene debajo.

Pues resulta que el "1" es el valor final de $imgs, si yo hago el print_r me devuelve un uno, no sé si estaré haciendo algo mal que todavía soy bastante inocente en PHP..., pero sé que es a causa del include, ya que las variables que devuelven una cadena de texto no toman un valor de uno, es como si tomara un valor positivo ¿no? ¿hay alguna manera de hacer desaparecer ese uno?

Saludos
 
Estado
No está abierto para más respuestas.
Arriba