Du php dans du javascript

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par poupilou, 16 Novembre 2020.

  1. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    Salut à tous,

    Je suis entrain de construire une fonction php qui me sera utile pour incorporer dans le code html de mes page le code pour les données structurées au format JSON-LD.

    Voici ma fonction :
    Code:
    function getDonneesStructurees(){
    $donnees_structurees = '<script type="application/ld+json">
    {
          "@context": "https://schema.org",
          "@type": "BlogPosting",
          "headline": "'.$titre_court.'",
          "image": [
            "https://example.com/photos/1x1/photo.jpg",
            "https://example.com/photos/4x3/photo.jpg",
            "https://example.com/photos/16x9/photo.jpg"
           ],
          "datePublished": "2020-02-05",
          "dateModified": "2020-02-05"
    }
    </script>';
    return $donnees_structurees;
    }
    
    Je voudrais en php faire une boucle while depuis une de mes tables MySql pour afficher les images dans "image": [......], comment faut il faire cela ? Sachant que pour la dernière image qui sera listée il ne doit pas y avoir de virgule après l'url de l'image.

    Merci pour votre aide.
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 117
    J'aime reçus:
    315
    Tu te casses la tête pour rien. Fait un array PHP et json_encode() :
    PHP:
    <?php

    $images 
    = [];
    foreach (
    $imagesDb as $image) {
        
    $images[] = $image['url'];
    }
    // Ou si c'est bien ça : $images = array_column($imagesDb, 'url');

    $jsonLd = [
        
    '@context' => 'https://schema.org',
        
    '@type' => 'BlogPosting',
        
    'headline' => $titre_court,
        
    'image' => $images,
        
    'datePublished' => '2020-02-05',
        
    'dateModified' => '2020-02-05',
    ];
    ?>
    <script type="application/ld+json">
        <?php echo json_encode($jsonLdJSON_PRETTY_PRINT); ?>
    </script>
     
    poupilou apprécie ceci.
  3. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    Merci spout, effectivement c'est plus simple comme tu le fait.

    Dan ma table MySql ou je stocke l'url de mes images, dans le champ 'url' j'aurais les url séparées par des virgules, est-ce que la dernière url de l'image de la boucle $images[] = $image['url']; n'aura pas de virgule ?

    Autre question : je souhaite parfois ajouter dans certaines de mes pages un Breadcrumb, du style :
    Code:
    <script type="application/ld+json">
    {
      "@context": "https://schema.org/",
      "@type": "BreadcrumbList",
      "itemListElement": [{
        "@type": "ListItem",
        "position": 1,
        "name": "Home",
        "item": "https://www.example.com/"
      },{
        "@type": "ListItem",
        "position": 2,
        "name": "Blog",
        "item": "https://www.example.com/blog/"
      },{
        "@type": "ListItem",
        "position": 3,
        "name": "SEO Tutorial",
        "item": "https://www.example.com/blog/seo-tutorial.html"
      }]
    }
    </script>
    
    Est-ce qu'il vaut mieux l'ajouter à la suite du premier code json, après "'dateModified' => '2020-02-05'," ou bien on ferme la première balise <script type="application/ld+json">...</scripts> et on réouvre une nouvelle balise <script type="application/ld+json"> pour y insérer ce Breadcrumb ?
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 117
    J'aime reçus:
    315
  5. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    Merci spout.

    Je vais essayer de tout mettre dans une seule balise <scripts>.

    J'ai un souci avec le php array pour les différents "ListItem" du Breadcrumb, ça m'affiche que le deuxième "ListItem", voici mon code :
    Code:
        
    $jsonLd = [
        '@context' => 'https://schema.org',
        '@type' => 'BlogPosting',
        'headline' => $voir['titre'],
        'description' => $voir['description'],
        'image' => 'https://www.example.com/images/seo.jpg',
        'datePublished' => '2020-02-05',
        'dateModified' => '2020-02-05',
        ];
        if($voir['page']!='Accueil'){
        $jsonLd += [
        '@type' => 'BreadcrumbList',
        'itemListElement' => [
            '@type' => 'ListItem',
            'position' => '1',
            'name' => 'Home',
            'item' => 'https://www.example.com/',
            '@type' => 'ListItem',
            'position' => '2',
            'name' => 'Page du blog',
            'item' => 'https://www.example.com/blog/',
            ]
        ];
        }
    
    Qu'est-ce qui ne va pas ?
     
  6. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 117
    J'aime reçus:
    315
    Tu as 2 clefs '@type', itemListElement c'est un tableau multiple.

    Code:
    'itemListElement' => [
           [
           '@type' => 'ListItem',
           'position' => '1',
           'name' => 'Home',
           'item' => 'https://www.example.com/'
           ],
           [
           '@type' => 'ListItem',
           'position' => '2',
           'name' => 'Page du blog',
           'item' => 'https://www.example.com/blog/'
           ]
       ]
    
    Ce genre d'erreur est mise en évidence avec un bon IDE :

    [​IMG]
     
    #6 spout, 16 Novembre 2020
    Dernière édition: 16 Novembre 2020
  7. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    Merci spout ton code marche parfaitement bien :)

    Par contre, le '@type' => 'BreadcrumbList', ne s'affiche pas dans le code html de ma page, why ?

    Voici mon code :
    Code:
    $jsonLd = [
        '@context' => 'https://schema.org',
        '@type' => 'BlogPosting',
        'headline' => $voir['titre'],
        'description' => $voir['description'],
        'image' => 'https://www.example.com/images/seo.jpg',
        'datePublished' => '2020-02-05',
        'dateModified' => '2020-02-05',
        ];
        if($voir['page']!='Accueil'){
        $jsonLd += [
        '@type' => 'BreadcrumbList',
        'itemListElement' => [
        [
            '@type' => 'ListItem',
            'position' => '1',
            'name' => 'Home',
            'item' => 'https://www.example.com/',
        ],
        [
            '@type' => 'ListItem',
            'position' => '2',
            'name' => 'Page du blog',
            'item' => 'https://www.example.com/blog/',
            ]
          ]
        ];
        }
     
  8. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    J'arrive pas à récupérer les url de mes images qui sont dans ma table MySql, voici mon code :
    Code:
    $requete = get_requete("SELECT * FROM $table_url WHERE url LIKE '%".$serveur_lien."'");
    $voir = $MysqliFetchArray($requete);
    $images = [];
    foreach ($voir['images'] as $choix){
    $images[] = $choix['images'];
    }
    $jsonLd = [
        '@context' => 'https://schema.org',
        '@type' => 'BlogPosting',
        'headline' => $voir['titre'],
        'description' => $voir['description'],
        'image' => $images,
        'datePublished' => '2020-01-01',
        'dateModified' => '2020-01-01',
        ];
    
    Ca m'affiche "image": [], dans mon code html pour les données structurées.

    Mes images sont stockées dans la colonne "images" de ma table, elles sont séparées par des virgules :
    Code:
    images/photo-1.jpg, images/photo-2.jpg, images/photo-3.jpg, images/photo-4.jpg
     
    #8 poupilou, 17 Novembre 2020
    Dernière édition: 17 Novembre 2020
  9. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 117
    J'aime reçus:
    315
    PHP:
    $images explode(', '$voir['images']);
     
    poupilou apprécie ceci.
  10. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    Merci spout ça marche nickel :)

    Est-ce qu'il serait possible d'avoir une fonction php qui récupère toutes les images sur les pages de mon site, ce qui éviterait que j'ai a stocker toutes les url de ces images dans ma table MySql ?
     
    #10 poupilou, 18 Novembre 2020
    Dernière édition: 18 Novembre 2020
  11. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    J'ai ce code ci-dessous qui extrait toutes les images d'une page en fonction de l'url d'une page ($url_cible) mais je voudrais que les images contenues dans la variable $exclusion ne s'affichent pas, comment faire cela ?
    Code:
    $url_cible = "http://www.mon-site.com/ma-page.html";
    echo "<div><b>URL cible</b> : " . $url_cible . "</div>";
    echo "<div><b>Liste des images relatifs et absolues</b> :</div><br>";
    $userAgent = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
    curl_setopt($ch, CURLOPT_URL,$url_cible);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $html= curl_exec($ch);
    if (!$html) {
        echo "<br />cURL erreur numéro:" .curl_errno($ch);
        echo "<br />cURL erreur:" . curl_error($ch);
        exit;
    }
    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $liens = $xpath->evaluate("/html/body//img");
    $exclusion = array('photo.gif','photo-2.png');
    for ($i = 0; $i < $liens->length; $i++) {
        $lien = $liens->item($i);
        $url = $lien->getAttribute('src');
        $url .= $lien->getAttribute('data-src');
        if(!in_array($url,$exclusion)){
            echo "$url<br>";
        }
    }
    
     
  12. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    841
    J'aime reçus:
    10
    J'ai trouvé, il suffit de remplacer le for() par celui-ci et ça marche :
    Code:
    for ($i = 0; $i < $liens->length; $i++) {
        $lien = $liens->item($i);
        $url = $lien->getAttribute('src');
        $url .= $lien->getAttribute('data-src');
        $patterns = implode('|', $exclusion);  
        if(!preg_match('/'.$patterns.'/', $url)){      
        echo "$url<br>";
        }
    }
    
     
Chargement...
Similar Threads - php javascript Forum Date
Code Javascript s'affiche différemment en php et en html Développement d'un site Web ou d'une appli mobile 8 Décembre 2014
Serveur SOAP PHP et Javascript Développement d'un site Web ou d'une appli mobile 24 Février 2013
PHP et Javascript Dynamique Développement d'un site Web ou d'une appli mobile 26 Juin 2012
Variable php dans du javascript Développement d'un site Web ou d'une appli mobile 17 Mars 2012
[PHP/JavaScript/Ajax] COmpte à rebour Développement d'un site Web ou d'une appli mobile 24 Juin 2011
[script] probleme confirm() javascript+ PHP Développement d'un site Web ou d'une appli mobile 7 Juin 2011
Gestion des Majuscules [script] - PHP / javascript Développement d'un site Web ou d'une appli mobile 9 Mars 2011
Erreur javascript ? ou code php pas bon? Développement d'un site Web ou d'une appli mobile 15 Novembre 2010
Carte pour un rpg en php, déplacement via javascript Développement d'un site Web ou d'une appli mobile 16 Juin 2010
Recuperer variable javascript dans PHP Développement d'un site Web ou d'une appli mobile 17 Février 2010