8768 sujets

Développement web côté serveur, CMS

Bonjour / Bonsoir Alsacréations,
je rencontre un problème sur mon code PHP :
PS : (C'est un fichier à part et pas de .htaccess)

<?php
header('Content-Type: text/css');
ob_start('ob_gzhandler');
header('Cache-Control: max-age=31536000, must-revalidate');

// MON PROBLEME
$page = substr(strrchr($_SERVER['REQUEST_URI'],'/'),1);
if(isset($page) && !empty($page) && $page == 'index.php') {
	$bcg_img = 'img1.extension';
} elseif($page == 'blog.php') {
	$bcg_img = 'img2.extension';
} else {
	$bcg_img = 'imgdefault.extension';
}
// --
?>
// Modification du bcg_img grâce aux variables en haut
.helmet_page {
    background-image: url("../img/<?= $bcg_img; ?>") !important;
}


EX 1 : Page où je suis : index.php; image = imgdefault.extension
EX 2 : Page où je suis : blog.php; image = imgdefault.extension  (toujours la même ...)

Mon problème est que ma condition ne fonctionne tout simplement pas ! Je ne sais pourquoi car si je fais un :

<?= substr(strrchr($_SERVER['REQUEST_URI'],'/'),1); ?>

sur par exemple : blog.php, mon echo m'affiche bien blog.php.
Or je sais bien qu'il est dans un autre fichier que celui des pages car il n'y a aucune importance car je récolte seulement le NOM de la page donc à la fin de l'URL.
Lorsque tu dis "Page où je suis : blog.php"

Qu'entends-tu par là ? Veux-tu dire "page qui s'affiche dans mon navigateur : blog.php" ? Ou bien "Lorsque j'appelle cette page qui n'est en fait pas une page mais un fichier CSS : blog.php" ?

Comment s'appelle le fichier PHP dont tu nous as donné le code ? blog.php ? index.php ? Autre chose ?
Modifié par Charlycoste (10 May 2018 - 14:49)
Utilise plutôt $_SERVER['HTTP_REFERER'] pour générer ta feuille CSS.

Ceci dit, c'est quand même la große solution.

Il est plus élégant de faire cela avec des class :
.helmet_page { background-image: url("../img/default.jpg"); }
.helmet_page.homepage { background-image: url("../img/homepage.jpg"); }
.helmet_page.blog { background-image: url("../img/blog.jpg"); }
Charlycoste a écrit :
Lorsque tu dis "Page où je suis : blog.php"

Qu'entends-tu par là ? Veux-tu dire "page qui s'affiche dans mon navigateur : blog.php" ? Ou bien "Lorsque j'appelle cette page qui n'est en fait pas une page mais un fichier CSS : blog.php" ?

Comment s'appelle le fichier PHP dont tu nous as donné le code ? blog.php ? index.php ? Autre chose ?

blog.php est le nom du fichier
Modérateur
bazooka07 a écrit :
Utilise plutôt $_SERVER['HTTP_REFERER'] pour générer ta feuille CSS.


HTTP_REFERER est la page d'où tu viens et non la page où tu es ! D'ailleurs, la valeur de cette donnée n'est pas sûr.

bazooka07 a écrit :

.helmet_page { background-image: url("../img/default.jpg"); }
.helmet_page.homepage { background-image: url("../img/homepage.jpg"); }
.helmet_page.blog { background-image: url("../img/blog.jpg"); }


oui mais il y a encore mieux en utilisant un outil/langage qui nous facilite la vie :

.helmet_page { 
    background-image: url("../img/default.jpg"); 
    @each $data in ( homepage, blog ){
        &.#{$data}{
            background-image: url("../img/#{$data}.jpg"); 
        }
    }
}
bazooka07 a écrit :

Utilise plutôt $_SERVER['HTTP_REFERER'] pour générer ta feuille CSS.

Merci pour ton aide bazooka07, j'avais chercher partout mais j'avais pas trouvé Smiley biggrin

header('Cache-Control: max-age=31536000, must-revalidate');

A la place de ça j'ai mis ça :

header('Cache-Control: no-cache');

car j'étais obligé d'enlever le cache manuellement avec CRTL + F5.
Si quelqu'un peut aussi venir m'éclaircir sur un sujet venez ici : https://forum.alsacreations.com/topic-6-83254-1-Gestion-du-dezoom-sur-Chrome-et-Firefox-different.html
niuxe a écrit :

HTTP_REFERER est la page d'où tu viens et non la page où tu es ! D'ailleurs, la valeur de cette donnée n'est pas sûr.
[/code]

Tu peux proposer quoi d'autre alors ? Y'a t-il une alternative ?
niuxe a écrit :

oui mais il y a encore mieux en utilisant un outil/langage qui nous facilite la vie :

.helmet_page { 
    background-image: url("../img/default.jpg"); 
    @each $data in ( homepage, blog ){
        &amp;.#{$data}{
            background-image: url("../img/#{$data}.jpg"); 
        }
    }
}

D'où est-ce que ça vient ? Est-ce du SAAS ou autre forme de css ?
Modérateur
Soldat8889 a écrit :

Tu peux proposer quoi d'autre alors ? Y'a t-il une alternative ?


oublie php pour générer ton css. Bien que tu puisses le faire, ça n'a pas de sens.

Si tu veux dynamiser ta mise en forme, utilise le SASS qui est prévu à cet effet.
niuxe a écrit :


oublie php pour générer ton css. Bien que tu puisses le faire, ça n'a pas de sens.

Si tu veux dynamiser ta mise en forme, utilise le SASS qui est prévu à cet effet.

D'accord je vais me renseigner sur SAAS Smiley cligne
Modérateur
Au passage, si tu veux solutionner ton souci en php pour le moment comme tu l'as fait (mauvaise pratique dû à une mauvaise abstraction des couches et à terme un problème de routing) :

<?php 
    $parts = explode('/', $_SERVER['SCRIPT_NAME']); //partir du principe que le fichier est inhérent au routing ! Sinon utiliser la clef : REQUEST_URI avec les conséquences que ça implique
    $bgi = "";

    switch(str_replace('.php', '', end($parts))){
        case 'index':
            $bgi = "img1";
            break;
        case 'blog':
            $bgi = "img2";
            break;
        default:
            $bgi = "imgdefault";
            break;
    }
?>
.helmet_page {
    background-image: url("../img/<?= $bgi; ?>.extension");
}

Modifié par niuxe (10 May 2018 - 16:29)
Soldat8889 a écrit :

D'accord je vais me renseigner sur SAAS Smiley cligne
.
Sass c'est pour quand tu passeras en classe supérieure.
Et tu auras certainement besoin de Nodejs et Gulp pour faire les modifs "en live"
Apprends déjà les règles simples du CSS3
Modifié par bazooka07 (10 May 2018 - 16:54)
niuxe a écrit :

HTTP_REFERER est la page d'où tu viens et non la page où tu es ! D'ailleurs, la valeur de cette donnée n'est pas sûr.
[/code]

Je pense que ce soldat a mal posé son problème et qu'il veut une feuille de style CSS dynamique
niuxe a écrit :
Au passage, si tu veux solutionner ton souci en php pour le moment comme tu l'as fait (mauvaise pratique dû à une mauvaise abstraction des couches et à terme un problème de routing) :

&lt;?php 
    $parts = explode('/', $_SERVER['SCRIPT_NAME']); //partir du principe que le fichier est inhérent au routing ! Sinon utiliser la clef : REQUEST_URI avec les conséquences que ça implique
    $bgi = "";

    switch(str_replace('.php', '', end($parts))){
        case 'index':
            $bgi = "img1";
            break;
        case 'blog':
            $bgi = "img2";
            break;
        default:
            $bgi = "imgdefault";
            break;
    }
?&gt;
.helmet_page {
    background-image: url("../img/&lt;?= $bgi; ?&gt;.extension");
}

Au début j'ai utilisé switch mais je l'ai enlevé car je croyais ne pas m'en servir correctement (et j'ai eu tord)
bazooka07 a écrit :
.
Sass c'est pour quand tu passeras en classe supérieure.
Et tu auras certainement besoin de Nodejs et Gulp pour faire les modifs "en live"
Apprends déjà les règles simples du CSS3

Non c'est bon je viens de m'y mettre et ce n'est pas si compliqué Smiley ravi
Modérateur
bazooka07 a écrit :

Sass c'est pour quand tu passeras en classe supérieure.


+1
bazooka07 a écrit :

Et tu auras certainement besoin de Nodejs et Gulp pour faire les modifs "en live"

Gulp, c'est du passé.... Aussi, j'ai jamais accroché à cet outil. Avant, j'utilisais Grunt avec browserify et ES6.
Webpack ou Parcel c'est mieux.

Fuse box est pas mal. Mais j'avoue avoir à peine survolé le sujet. Puisque Parcel ou webpack sont vraiment biens.


bazooka07 a écrit :
Apprends déjà les règles simples du CSS3

+1 je dirai même maîtriser le html et le css avant de s'attaquer à des langages dynamiques. Sinon, c'est le mur assuré !

bazooka07 a écrit :

Je pense que ce soldat a mal posé son problème et qu'il veut une feuille de style CSS dynamique


C'est surtout qu'il a mélangé une technologie serveur avec du front. Smiley biggol
Modifié par niuxe (10 May 2018 - 21:33)
Meilleure solution