Bonjour à tous,
Tout d'abord, merci pour votre forum clair et complet, qui me permet d'avancer dans mon apprentissage du html et du css.

J'ai construit un menu avec deux niveaux de sous-menus en html et css.
J'obtiens bien mon menu et l'affichage du sous-menus de 1er niveau
Cependant, lorsque je clique sur mon sous-menus de 1er niveau, le sous-menus de 2ème niveau apparait sur le sous-menus de 1er niveau..
J'ai mis des couleurs différentes pour pouvoir visualiser :

upload/1718274066-86645-pbmenus.png

Malgré de nombreuses recherches, je ne trouve pas de solution (certainement juste un problème de position ou de display mais j'avoue avoir un peu de mal avec cela).

Je vous joint mon code HTML et mon code CSS, si quelqu'un aurait quelques minutes pour m'aider.


<!doctype html>
<html lang="fr">
<head>
	<meta charset="utf-8"/>
	<title>Tableau de bord RHL - Accueil</title>
	<link rel="stylesheet" href="style.css"/>	
	<script src="_STYLES/script.js"></script>
</head>

<body>

	<div class="menu">
		<ul>
			<li class="si_sousmenus1">
                <a href="*">accueil</a>
                    <ul class="sousmenus1">
                        <li class="si_sousmenus2">
                            <a href="*">A propos</a>
                            <a href="mailto:*">Contact</a>
                        </li>
                    </ul>
            </li>
			<li class="si_sousmenus1">
                <a href="*">Exploitation</a>
                    <ul class="sousmenus1">
                        <li class="si_sousmenus2">
                            <a href="*">Chiffres d'affaires</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">Détails mensuels</a>
                                </li>
                                <li>
                                    <a href="*">Détails annuels</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Résultats nets</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">Détails mensuels</a>
                                </li>
                                <li>
                                    <a href="*">Détails annuels</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Taux de marge</a>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Créances clients</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">Montants des créances clients</a>
                                </li>
                                <li>
                                    <a href="*">Ratio de rotation des créances clients</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Dettes fournisseurs</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">Montants des dettes fournisseurs</a>
                                </li>
                                <li>
                                    <a href="*">Ratio de rotation des dettes fournisseurs</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Stocks de marchandises</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">Valeur des stocks par type</a>
                                </li>
                                <li>
                                    <a href="*">Ratio de rotation des stocks</a>
                                </li>
                            </ul>
                        </li>
                    </ul>
            </li>
			<li class="si_sousmenus1">
                <a href="*">Restauration</a>
                    <ul class="sousmenus1">
                        <li class="si_sousmenus2">
                            <a href="*">Restauration globale</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">sousmenus2 _ 1</a>
                                </li>
                                <li>
                                    <a href="*">sousmenus2 _ 2</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Petits déjeuners</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">sousmenus2 _ 1</a>
                                </li>
                                <li>
                                    <a href="*">sousmenus2 _ 2</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Repas normaux</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">sousmenus2 _ 1</a>
                                </li>
                                <li>
                                    <a href="*">sousmenus2 _ 2</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Compléments alimentaires</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">sousmenus2 _ 1</a>
                                </li>
                                <li>
                                    <a href="*">sousmenus2 _ 2</a>
                                </li>
                            </ul>
                        </li>
                        <li class="si_sousmenus2">
                            <a href="*">Repas spéciaux</a>
                            <ul class="sousmenus2">
                                <li>
                                    <a href="*">sousmenus2 _ 1</a>
                                </li>
                                <li>
                                    <a href="*">sousmenus2 _ 2</a>
                                 </li>
                            </ul>
                        </li>
                    </ul>
            </li>
			<li>
                <a href="*">Hôtellerie</a>
            </li>
			<li>
                <a href="*">Hébergement</a>
            </li>
			<li>
                <a href="*">Loisirs</a>
            </li>
			<li>
                <a href="*">Finances</a>
            </li>
			<li>
                <a href="*">Egalim</a>
            </li>
			<li>
                <a href="*">Eda/Cpa/Mic</a>
            </li>
		</ul>
	</div>
	<div class="test">test
    </div>
	
</body>
</html>


* {
    margin: 0;
    padding: 0;
}
body {
    font-family: "Inter";
    height: 3000px;
}
.menu {
    position : sticky;
    top: 0;
    left: 0;
    background-color: yellow;
}
.menu > ul {
    display: flex;
    list-style: none;
}
.menu ul a{
    text-decoration: none;
    color: black;
    display: block;
    padding: 10px;
}
.menu li a:hover{
    background-color: grey;
}
.test {
    background-color: black;
    color: white;
    height: 500px;
}
.si_sousmenus1 {
    position: relative;
}
.sousmenus1 {
    list-style: none;
    display: none;
    position: absolute;
    top: 40px;
    left: 0;
    background-color: blue;
    width: max-content;
}
.sousmenus1 li a:hover {
    background-color: grey;
}
.si_sousmenus1:hover .sousmenus1 {
    display: block;
}
.si_sousmenus2 {
    position: relative;
}
.sousmenus2 {
    list-style: none;
    display: none;
    position: absolute;
    top: 40px;
    left: 0;
    background-color: green;
    width: max-content;
}
.sousmenus2 li a:hover {
    background-color: grey;
}
.si_sousmenus2:hover .sousmenus2 {
    display: block;
}


En vous remerciant par avance, bonne journée à tout le monde.
jlba a écrit :
@Felipe
Je ne connaissais pas Vault.
J'avais pensé à Keypass mais j'imaginais qu'il pouvait exister un logiciel dédié. Je m'étonne que non.

Il y a Keyweb, compatible avec Keypass, mais perso je n'ai utilisé que Keypass individuel et notre Vault qui a pile les fonctionnalités nécessaires. Faut que ce soit libre et un peu validé par la communauté avant qu'on s'y intéresse...
Pour les autres données clients, il existe des CRM mais je ne peux pas te conseiller quoi que ce soit : il y a 10-15 ans rien ne nous convenait donc dew a au fil des ans codé son propre intranet "CRM" enfin RH, facturation, formations, etc et on utilise pas mal GitLab donc README, Issues, etc Peut-être ClickUp qui est un outil de gestion pas mal fait. Coûte quelques $/mois mais ça les vaut, c'est pas le souci. C'est surtout l'inconvénient d'être un outil de plus.
2lwess a écrit :


Je pense c'est vraiment génial ! Et pourquoi "la place au soleil, ça va être chaud" est-ce que cette tirade se lie au fait que ça soit destiné aux petits africains ? Je trouve ça un peu bof, surtout pour une cause que j'aide depuis 3 ans ... Smiley sweatdrop


Je pense pas qu'il se serait permit de parler des "petits africains" mais plutôt de la place concurrentiel à laquelle il fait référence Smiley saoul
Salut
J'ai l'impression que Spip n'est pas bien installer

je n'ai pas compris si ton message de WARNING tu l'a sur ton FTP (parlons plutôt d'hébergeur, car ftp c'est juste le protocol) ou en local ?

en voyant le message "directory in D:\ProgramFile\xampp\htdocs\pg_api\spip.php" j'ai l'impression que c'est en local.

Donc que vient faire l'hébergeur dans l'histoire ?

Si tu peux plus expliquer plus en détails merci !
Modifié par JENCAL (13 Jun 2024 - 10:07)
Hello tous, après avoir recueilli vos avis éclairés, je me lance dans l'aventure SPIP comme CMS pour mon projet innovant de nail-art. Allez, fille, lezgong !

Il est primordial que je puisse construire une page d'accueil (homepage) et une page de galerie avec les différentes réalisations en vedette !

Après avoir recueilli un espace FTP et un domaine du nom associé je me retrouve sans savoir quoi faire. Genre gros message d'erreur et puis pouf.

Je travaille sur cette page : https://www.spip.net/fr_article4589.html

Et là ça shizzle :

Warning: fopen(id_1_29/10/2019_05:59:57.txt): failed to open stream: No such file or directory in D:\ProgramFile\xampp\htdocs\pg_api\spip.php


Quelles sont mes options pour avancer, s'il vous plait ? Smiley bawling
lionel_css3 a écrit :
Bonjour à tous,

J'ai retravaillé sur un site un peu ancien, que j'avais déjà soumis ici il y a quelques années.

Evasion 24

J'ai remanié la page d'accueil et aussi le configurateur de van intégré, corrigé les autres pages et je me suis acharné sur l'optimisation de la page d'accueil afin d'avoir des bons scores PageSpeed Insights.

Enjoy

upload/1717836429-40948-comparatif-performances-final.jpg


Wow, super remastering, j'adore ! C'est clair et efficace, c'est quoi Lio que tu utilises en arrière ? Juste le logo "Le Goeland, libre comme l'oiseau" qui devrait être changé, la font est trop cheesy du fromage Smiley lol
Modifié par 2lwess (13 Jun 2024 - 08:08)
Olivier C a écrit :
Bonjour,

Application web fait avec Bootstrap. Ce n'est pas vraiment un problème en soit mais en l'état ça manque de personnalité.

Autre problème : je ne connais pas bien ce créneau mais il me semble qu'il est déjà très concurrentiel. Pour tenter de se faire une place au soleil ça va être chaud.


Je pense c'est vraiment génial ! Et pourquoi "la place au soleil, ça va être chaud" est-ce que cette tirade se lie au fait que ça soit destiné aux petits africains ? Je trouve ça un peu bof, surtout pour une cause que j'aide depuis 3 ans ... Smiley sweatdrop
niuxe a écrit :
Salut,

Au pif, le fichier .env ?

Ensuite, tu peux te créer un système qui va te parser ce fichier et ressortir en .odt / .md / .docx / .doc Smiley cligne

Avec PHP ou Python, c'est très facile à faire Smiley cligne


Hey, hein mais pourquoi ? Alors que des systèmes comme 1password ou NordVpn Secure Vault existent, pour quelle raison suggérer des fichiers .env de déploiement sur des sites de productions avec le staging ? C'est très bizarre. Smiley hum
Bonsoir,

Perso, j'utilise la methode de QentinC.


<?php

Namespace Controllers;

class HomeController
{
    public function render($pageTitle, $cssFileName): string
    {
        // 'home.php' est le $content à insérer dans 'default.php'
        $viewPath = 'xx/xxx/views/home.php';
        
        ob_start();
            require $viewPath;
        $content = ob_get_clean();

        return $content;
    }
}

default.php

<!DOCTYPE html>
<html lang="fr">
<head>
</head>
<body>
    <?= $content; ?>
</body>
</html>

home.php

<main>
    <h1>démo</h1>
    <div>Lorem, ipsum dolor sit amet consectetur adipisicing elit. 
Dolore excepturi corporis dolorem sapiente numquam earum eius
eum libero, eaque totam!</div>
</main>
Bonjour,

jlba a écrit :
vous faites comment chez Alsa ?

Chez https://www.alsacreations.fr on a à présent une instance Vault pour stocker les informations sensibles (mots de passe essentiellement, avec tout ce qui les accompagne) et les transmettre aux clients (et avant ça pour les partager entre nous). Très pratique !
Seul inconvénient : eeet l'adminsys a un serveur de plus à maintenir (mais on est loin des montées de version de GitLab parait-il). Pas grave, dew savait pas quoi faire entre midi et deux... Smiley murf
À titre perso j'utilise un fichier Keypass, pratique parce que je suis très souvent offline mais c'est pas gérable dans une équipe : on ne sait vite plus qui a LA dernière version du fichier et paf l'un écrase les modifs de l'autre. Et non ça ne se stocke pas dans le cloud Smiley hum

Pour les autres infos pas sensibles, je ne pourrais pas dire comment font mes collègues (*) à part qu'on a des clients et environnement bien trop différents. Par mail au fur et à mesure je crois bien.
(*) Je suis un cas à part vu que pour réaliser des audits d'accessibilité, c'est le client qui m'envoie les infos, pas l'inverse et y a rien de sensible : les sites en préprod ne contiennent que des données perso fictives, histoire de respecter le RGPD.
Modifié par Felipe (12 Jun 2024 - 20:55)
niuxe a écrit :
Slim est un routeur et non un moteur de template. Slim n'est pas un micro framework. C'est un routeur avec injection de dépendance (ce qui fait sa force). Je pense que tu veux parler de Mustache par exemple.

Je connais Mustache. Mais Slim est aussi le nom du moteur de template par défaut de Ruby on Rails. C'est d'ailleurs lui qui a inspiré le moteur Pug.js que j'utilise.
Modifié par Olivier C (12 Jun 2024 - 20:47)
jlba a écrit :
Sans avoir à le développer...


Au temps pour moi pour le .env. Pourquoi n'utilises-tu pas Notion ? Le souci étant que c'est du proprio et de ce fait, tu es à la merci de cet éditeur.¹

Ton truc à développer, c'est simple (2 tables et deux CRUD et un système d'export).

edit: tu peux même imaginer de créer ce genre de petites choses avec la suite bureautique Libre Office. Tu as une base de données (Base) et un traitement de texte (Writer) pour exporter ces données en fichier odt/doc/docx/pdf. Il ne faut pas oublier que c'est un excellent outil. Le hic, je ne crois pas que tu puisses partager ces données (exemple: connexion à la base de données) facilement dans un env technique (quoique.... il faut creuser de ce côté là).

¹ Change to Adobe terms & conditions outrages many professionals.
Modifié par niuxe (12 Jun 2024 - 20:30)
QuentinC a écrit :
Bonsoir,

Une autre stratégie que tu peux essayer, plutôt que de t'amuser avec str_replace voire preg_replace et donc peut-être plus facile, c'est la temporisation de sortie (output buffering).

.........

Il n'empêche que ce n'est quand même pas hyper adapté aux gros fichiers, car le contenu va s'accumuler en mémoire puis être copié une seconde fois dans $data. Prévoir au moins 3 ou 4 fois autant de mémoire que la taille totale de la sortie attendue.

oui, c'est à ce genre de solution que je pensais.
Est-ce vraiment plus consommateur en mémoire que de mettre tous les fichiers dans des variables et faire de la chirurgie ?
Merci Niuxe.
De quel fichier .env parles-tu ?
Moi je parle de toutes les infos techniques et administratives diverses et variées :
- domaine et registrar,
- hébergement, accès panel, base de données...
- boites mail + mdp...
- etc...
qui en plus ne sont pas toujours tous chez le même prestataire... et avec des fois des commentaires utiles.

Il me faut juste une petite interface simple qui permette d'ajouter des champs en fonction du besoin avec un minimum de catégorisation. Et la possibilité d'exporter vers un fichier lisible et imprimable.

Sans avoir à le développer...
Bonsoir,

Une autre stratégie que tu peux essayer, plutôt que de t'amuser avec str_replace voire preg_replace et donc peut-être plus facile, c'est la tamporisation de sortie (output buffering).


<?php
ob_start();
echo "Tout ce que tu veux !";
includ('xyz.php');
echo "Encore n'importe quoi !";
$data = ob_get_contents();
ob_end_clean();
file_put_contents('fichier.html', $data);
?>


IL n'empêche que ce n'est quand même pas hyper adapté aux gros fichiers, car le contenu va s'accumuler en mémoire puis être copié une seconde fois dans $data. Prévoir au moins 3 ou 4 fois autant de mémoire que la taille totale de la sortie attendue.
Modifié par QuentinC (12 Jun 2024 - 18:20)
Salut,

Olivier C a écrit :
(Twig, Smarty, Slim, etc.)


Slim est un routeur et non un moteur de template. Slim n'est pas un micro framework. C'est un routeur avec injection de dépendance (ce qui fait sa force). Je pense que tu veux parler de Mustache par exemple.

En soi, PHP est un moteur de template relativement basique. Quand les besoins sont simples, php suffit amplement. C'est vrai que Twig ou même Smarty (c'est du php masqué), c'est sexy.
Modifié par niuxe (12 Jun 2024 - 18:01)
Bonjour les kiwis,

À chaque client c'est pareil, il y a plein d'infos techniques + id + mdp à gérer: domaine, hébergement, panel de gestion, emails, admin du cms, base de données... Autant d'infos pas très faciles à classer mais qui reposent banalement sur des paires clef/valeur

Faute de grives, on se fade le tableur. Mais n'existerait il pas un petit logiciel fonctionnant sous Linux permettant d'enregistrer toutes ces infos de manière claire et de les sortir par ex en pdf pour les fournir au client ?

vous faites comment chez Alsa ?

Merci d'avance.
Oui, c'est ce que j'avais prévu de faire mais j'espérais qu'il y aurait quelque chose de plus direct.
Mettre le contenu des très gros fichiers X et Y dans des variables n'est pas très efficace.
Dans le cas du premier fichier, la taille est de 223 Ko, le fichier Y fait plusieurs centaines de Ko, dans certains cas plusieurs Mo.
J'ai commencé par essayer sur le premier fichier, qui contient un gros script en .js minifié, je n'arrive pas à le mettre dans une variable, pour je ne sais trop quelle raison.

Mon code actuel est dans la partie admin de mon site, je vais le déplacer dans un répertoire accessible pour pouvoir partager mon code.
Si tu veux le faire à la main, il va falloir te rapprocher de
file_get_contents()
pour lire un fichier (par exemple ton fichier X)
et ensuite faire un str_replace()
pour remplacer ta variable $ENGINE$

On aurait ton fichierModel.html qui serait :
  <head>
      ..........
    <script>$ENGINE$</script>
      ..........
  </head>
   <body>
      ..........
      <script>$DATA$</script>
      ..........
   </body>
</html>

Ensuite un fichier php pour "fusionner" le tout :

// ton fichier x qui contient ce que tu souhaite
$fichierX = 'chemin/vers/fichierX.html';

// on lit le fichier x et le template chez qui tu veux remplacer les variable
$contenuX = file_get_contents($fichierX);
$template = file_get_contents('chemin/vers/fichierModele.html');

// on remplace la fameuse variable
$template = str_replace('$ENGINE$', $contenuX, $template);

// on l'écrit dans un nouveau fichier
file_put_contents('chemin/vers/fichierFinal.html', $template);

echo $template;

Modifié par JENCAL (12 Jun 2024 - 16:47)
Je crois que je me suis mal exprimé:
si je voulais envoyer le résultat directement vers le navigateur, il suffirait de transformer le fichier modèle en php et de mettre des include dans le code.

<html>
<head>
      ..........
    <script>
<?php include fichier X; ?>
</script>
      ..........
  </head>
   <body>
      ..........
      <script>
<?php include fichier Y; ?>
</script>
      ..........
   </body>
</html>

Mais ce que je veux faire c'est envoyer le résultat dans un fichier.
Bonjour à tous

J'ai un "fichier modèle" en HTML qui a l'allure suivante :

  <head>
      ..........
    <script>$ENGINE$</script>
      ..........
  </head>
   <body>
      ..........
      <script>$DATA$</script>
      ..........
   </body>
</html>

Je dois créer un fichier qui comprend ce modèle avec $ENGINE$ remplacé par le contenu d'un fichier X et $DATA$ par le contenu d'un fichier Y

Ma question : y a-t-il un moyen simple d'écrire cela en PHP ?
Merci de vos conseils
Modifié par PapyJP (12 Jun 2024 - 12:49)
@uiguig
Pour les CGU, il y a trop de modèles sur le net pour que j'en propose un plus que l'autre. Il suffit juste de les adapter à son projet. Mais en effet, si tu stocke des données personnelles sur ton serveur, il va falloir étudier sérieusement les CGU. Une visite à la CNIL est une bonne idée.
Je ne peux donner d'autres conseils, je découvre ce genre d'applications.
Je commence à me rendre compte que faire un site pour une ONG ou une association implique quelques responsabilités (tout du moins pour le responsable de cette ONG). De plus, pour les dons ou les adhésions, il faut mettre en place un système de paiement en ligne. Dans ce cas, il faut être au top question protection des données privées des visiteurs.
Il existe beaucoup de méthodes de paiement en ligne.
https://www.wizishop.fr/blog/solution-paiement-en-ligne
Mieux vaut ne pas bricoler dans ce domaine, et se reposer sur une structure solide. Sinon, gare aux clients floués. Smiley prison
uiguig a écrit :
Commercialement, je n'ai pas d'objectif : je serai déjà content d'utiliser l'app pour les associations dont je fais partie. Aussi, je pense que la gratuité pourrait aider l'adoption chez les petites assos (fablab, ...). Si ça se produit, je serai déjà satisfait Smiley smile

Ha ha ! Mais je suis un peu comme toi en fait...
À la différence près que, moi, je n'ai toujours pas sorti mon projet. Existe-t-il vraiment d'ailleurs ? D'aucuns disent que c'est une légende...
Modifié par Olivier C (12 Jun 2024 - 06:36)
@Olivier_C L'app en elle-même est en Vuetify, et c'est vrai qu'il n'y a eu aucun effort de thème ! A vrai dire c'est toujours plus moche que l'original quand je m'y essaye ! Smiley confused

Commercialement, je n'ai pas d'objectif : je serai déjà content d'utiliser l'app pour les associations dont je fais partie. Aussi, je pense que la gratuité pourrait aider l'adoption chez les petites assos (fablab, ...). Si ça se produit, je serai déjà satisfait Smiley smile
@Bongota, merci d'avoir essayé l'app ! Smiley good C'est vraiment chouette d'avoir un regard neuf car quand on a le nez dedans on perd un peu le sens de l'ensemble.

Il faut que je m'occupe du menu de gauche, il est un peu vide et il prend de la place. Soit je l'enlève et la navigation se fait autrement, soit je l'étoffe un peu. Je pense que je vais l'enlever dans un premier temps.

Concernant les données, j'héberge l'ensemble sur un petit VPS chez OVH.

Tu as entièrement raison pour les CGU, si tu as des pistes d'aides à la rédaction je suis preneur !

J'aimerais que cette appli puisse permettre à une asso de créer un site et de faciliter sa gestion, d'ailleurs je me demande un peu comment structurer les accès des "simples membres" (non admins) : plutôt via un "espace membres" sur l'app ou bien les mêmes vues mais sans certaines fonctions ?
Bonsoir,

Alors les variables globales OK, mais pour autre chose que des constantes ça me chagrine un peu. D'ailleurs je n'arrive pas à voir dans quel cas de figure une variable globale itérative pourrait être utile.

Sous Node.js j'utilise les fichiers .env désormais natifs sous cet environnement. Sinon, en JS pur, je crée des objets que j'utilise comme espace de nom - comme le préconise Niuxe -, avec des paires de clefs/valeurs et, comme il s'agit forcément pour moi de constantes, je gèle le tout avec Object.freeze().
Modifié par Olivier C (11 Jun 2024 - 20:31)
Bonjour,
j'ai ouvert un compte pour tester. Je vais justement avoir besoin de ce genre d'Appli pour une petite ONG africaine qui m'a demandé de lui créer un site léger.
Le menu de gauche est vide, quand on tente de l'ouvrir. Sur ordinateur et Firefox, il y a un panneau blanc qui cache une partie du texte d'accueil. sur mobile, ça va mieux, mais le menu de gauche s'ouvre toujours vide.
Où sont stockées les données d'une association ?
Je n'ai pas vu les CGU, indispensable pour ce genre d'Appli. En plus d'être obligatoires.
Certains liens n'aboutissent pas.
Sûrement à terminer.
Cette Appli pourrait-elle remplacer un site complet, pour une association ?
upload/1718115985-67790-essai-asso.png
Modifié par Bongota (11 Jun 2024 - 16:26)
niuxe a écrit :
Salut,



Mettre une variable en global n'est jamais une bonne chose. Il suffit de jouer sur la portée d'une variable dans le scope définit. Si on doit mettre une variable dans le scope global (ce qui est rare), Il vaut mieux utiliser un namespace (window.monCarousel.centralCard. Pourquoi ? collision de variable, c'est chiant à déboguer !


Salut

Après le fait d'avoir une nomenclature correct pour les globales ça passe nan ?

var GLOBALE_CENTRAL_CARD = 1;


et après joué dessus.
ça me choque pas tant que ça, surtout si on découpe bien les fichiers.
Salut,

Dave-Hiock a écrit :

Si par contre tu souhaites utiliser cette variable hors du scope il te faut soit la passer en variable globale


Mettre une variable en global n'est jamais une bonne chose. Il suffit de jouer sur la portée d'une variable dans le scope définit. Si on doit mettre une variable dans le scope global (ce qui est rare), Il vaut mieux utiliser un namespace (window.monCarousel.centralCard. Pourquoi ? collision de variable, c'est chiant à déboguer !

html

<p>
  <button type="button" id="leftSelect">left</button>
  <button type="button" id="rightSelect">right</button>
</p>
<p class="result"></p>

<p>
  <button type="button" id="gaucheSelect">gauche</button>
  <button type="button" id="droiteSelect">droite</button>
</p>
<p class="result"></p>


js (fait quelque chose de très simple. On peut largement améliorer. Exemple, créer une fonction initialize qui lance dynamiquement toutes les fonctions annexes)

$(function() {
  var mesCarousels = function(){
    var centralCard = 1
    var uneFonction = function(){
      var result = $('.result')

      var right = $('#rightSelect')
      var left = $('#leftSelect')
      right.click(function(){
        centralCard++
        result.text(centralCard)
      });

      left.click(function(){
        centralCard--
        result.text(centralCard)
      });

      result.text(centralCard)
    }
    var uneAutreFonction = function(){
      var result = $('.result')

      var right = $('#droiteSelect')
      var left = $('#gaucheSelect')
      right.click(function(){
        centralCard++
        result.text(centralCard)
      });

      left.click(function(){
        centralCard--
        result.text(centralCard)
      });

      result.text(centralCard)
    }
    uneFonction()
    uneAutreFonction()
  }
  
  mesCarousels()
})

Modifié par niuxe (10 Jun 2024 - 19:33)
\ô/
Evan-code a écrit :
Et le fait est que les fonctions de left.click() et right.click() semblent ne pas utiliser la variable centerCard que j'ai définie moi même,

ta variable est bien utilisée mais uniquement dans le scope défini ci-dessous :
$(function() {
    var centralCard = 1;
})

pour t'en convaincre il te suffit de mettre, dans les fonctions aux clics, des
right.click(function(){
    centralCard +=1;
    console.log(centralCard)
});


Evan-code a écrit :
Je voudrais savoir s'il était possible et comment faire pour que ces fonctions utilisent la variable que j'ai créé (pour la réutiliser dans d'autres fonctions)

Si par contre tu souhaites utiliser cette variable hors du scope il te faut soit la passer en variable globale
let centralCard = 1;   // variable déclarée globale
$(function() {
})

soit la passer en paramètre aux fonctions concernées appelées.
Sujet réglé.

C'était donc bien le problème de Google lui-même.
Il fallait demander un nouveau critère d'analyse, afin d'intégrer http et https.

Pour le passage du https, il suffisait d'avoir le certificat sur son serveur, et de faire les redirections 301 permanentes pour guider tout le monde vers le https (sachant que les pages sont en doublon http et https).

Merci d'avoir aidé à trouver la solution.
Bingo !
C'est assez délirant et inexplicable, mais ça a l'air de marcher correctement pour mon fichier de test!
merci @gcyrillus et @Felipe, vous me retirez une énorme épine du pied.

Pour que vous saisissiez l'étendue de la chose :
Je fais des fichiers de travail pour une 50aine de partitions chaque année, mais chacune est corrigée au moins 10 fois en moyenne pour différentes raisons.
De plus je ne génère pas 1 fichier .myrzip.html par partition, mais 3 fichiers avec des paramètre internes différents, correspondant à différentes façons de travailler leurs partitions des utilisateurs.
Actuellement, je fais manuellement un fichier .zip par fichier .myrweb.html et je le transfère par ftp

Quand j'aurai réalisé l'utilitaire qui utilisera cette fonction, il me suffira de lancer cet utilitaire une fois sur un groupe de fichiers .myrweb.html, voire tous les fichiers de ce type dans la bibliothèque en ligne des partitions.

De plus je pourrai réaliser ensuite un programme qui remplace <script src="..."></script> par le contenu de ce fichier, ce qui rendra les fichiers .zip utilisable par des personnes qui ne sont pas connectées à internet (si! si!, ça existe dans les endroits reculés où on aime passer ses vacaces loin de tout avant de participer au stage de musique)

Je note le problème comme résolu, je reviendrai vous mettre au courant du développement de mon utilitaire.
Bonjour,

Étonnant que le 2e paramètre conserve une arborescence. Le Zip existant est bien supprimé avant d'en créer un nouveau ?
En mettant une valeur en dur addFile(..., "page.html") ?

Sinon autre commentaire qui semble intéressant :
addFile PHP a écrit :
If you have problem with windows explorer reading zipfile created by linux, try:
$oZip->addFile ( $file_name, " " . basename ( $file_name ) )
That space " " should solve.


EDIT : je me demande bien ce que ça peut changer au schmilblick, mais mes connaissances en format Zip se résument à "les 2 premiers caractères d'un Zip sont PK"
Modifié par Felipe (10 Jun 2024 - 10:52)
Bonjour à tous !

J'ai créé un logiciel de gestion d'association en ligne. L'app est gratuite : je veux proposer une app simple et abordable pour les assos qui n'ont pas besoin de solution très poussées. J'ai déployé mon prototype sur https://guild-kit.com ; n'hésitez pas à aller l'essayer si ça vous intéresse !
Je suis preneur de tous les retours pour améliorer l'outil, il y a un petit formulaire pour ça dans l'app et on peut aussi en parler ici ????

Merci à ceux qui essaieront, au plaisir de vous lire !

PS. Si vous avez aussi des avis sur la "landing" n'hésitez pas. Cette partie est encore un peu "work in progress" mais je suis à l'écoute !
L'astuce serait de faire une copie de ton fichier dans le répertoire où se trouve le script et de zipper celui-ci en n'indiquant que le nom de fichier.
Le script cherchera et prendra le fichier au nom correspondant dans le répertoire courant, il n'y aura pas d'arborescence distante à reproduire .

Le plus simple est de mettre ton script directement dans le dossier des fichiers HTML , soit en le déplaçant, soit via un include() , tu n'auras plus qu'a donner le nom de fichier en variable $path

cdt
Modifié par gcyrillus (09 Jun 2024 - 19:59)
50 Dernières réponses