Pagina 3 di 3 PrimoPrimo 123
Visualizzazione risultati 61 fino 75 di 75
Like Tree4Likes

Discussione: Codice per Tag

  1. #61
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    perfetto adesso funziona, mi ha restituito dei risultati


    adesso come procediamo?

  2. #62
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Il prossimo passo è realizzare il file HTML col JavaScript necessario per interrogare il sistema (tramite AJAX) e mostrare i risultati.
    Direi di usare jQuery per le chiamate e Handlebars per mostrare i dati. Più tardi preparo una bozza .
    Però servirebbe un esempio di JSON. Prova a copiare qui il risultato di una delle ricerche, l'output di search.php.
    Ultima modifica di mzanella : 30-11-2020 alle ore 16.44.01

    I suggerimenti che do più spesso:


  3. #63
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Il prossimo passo è realizzare il file HTML col JavaScript necessario per interrogare il sistema (tramite AJAX) e mostrare i risultati.
    Direi di usare jQuery per le chiamate e Handlebars per mostrare i dati. Più tardi preparo una bozza .
    Però servirebbe un esempio di JSON. Prova a copiare qui il risultato di una delle ricerche, l'output di search.php.
    ok, grazie tante di cuore

    e raro trovare di questi tempi gente che ti aiutano, specialmente con un principiante come me,

    tu sei un'eccezione (insieme a darbula e GraphOGLRisorse)

    ecco gli l'output di actor_id e actor_id e studio

    cinema/members/search.php?fq[0][0][actor.actor_id]=54

    cinema/members/search.php?fq[0][0][actor.actor_id]=54&fq[1][0][studio]=Universal

    li ho messi sul mio cloud perche' e' un po' lunghetto


    https://yadi.sk/d/qIyM0dQbfYio9Q
    Ultima modifica di blackskyisback : 30-11-2020 alle ore 17.04.31

  4. #64
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Questo è un punto di partenza:
    Codice PHP:
    <?php
    $tags
    = ['Universal', 'X', 'Y', 'Z'];
    $actors = [
    [
    'id' => 1,
    'name' => 'Anna Abbott'
    ],
    [
    'id' => 2,
    'name' => 'Bett Birningham'
    ],
    [
    'id' => 3,
    'name' => 'Charlotte Cheen'
    ]
    ];
    ?>
    <html>
    <head>
    <title>Search page</title>
    <style>
    form {
    width: 1024px;
    max-width: 80%;
    margin: auto;
    }

    label {
    display: block;
    }

    fieldset {
    margin: 1em auto 0.5em auto;
    }

    #result-container {
    width: 1024px;
    max-width: 80%;
    margin: auto;
    }

    #result-container h2 {
    margin-bottom: 0;
    }

    #result-container small {
    color: #666;
    font-style: italic;
    }

    article {
    border: 1px solid #666;
    padding: 1em;
    border-radius: 1em;
    margin-bottom: 0.5em;
    }

    .synopsis {
    font-size: 0.9em;
    }
    </style>
    </head>

    <body>
    <form id="search-form">
    <label>
    Cerca film con questo attore:
    <select name="actor">
    <option value="any">Nessun filtro</option>
    <?php foreach ($actors as $actor): ?>
    <option value="<?php echo $actor['id']; ?>"><?php echo $actor['name']; ?></option>
    <?php endforeach; ?>
    </select>
    </label>

    <fieldset>
    <legend>Cerca film con almeno uno dei seguenti tag</legend>
    <?php foreach ($tags as $tag): ?>
    <label>
    <input name="tag" type="checkbox" value="<?php echo $tag; ?>"> <?php echo $tag; ?>
    </label>
    <?php endforeach; ?>
    </fieldset>
    </form>

    <div id="result-container">
    </div>


    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
    <script id="search-results-template" type="text/x-handlebars-template">
    <h2>Risultati ricerca</h2>
    <small>{{header.result_count}} risultati in {{header.time}} ms</small>
    {{#each results}}
    <article>
    id: {{film_id}}<br>
    title: {{movie_title}}<br>
    genre: {{genre}}<br>
    <div class="synopsis">{{{synopsis}}}</div>
    </article>
    {{else}}
    <p>Nessun risultato</p>
    {{/each}}
    </script>

    <script>
    var result_container = $('#result-container');
    var source = document.getElementById("search-results-template").innerHTML;
    var template = Handlebars.compile(source);

    function display_results(data) {
    result_container.html(template(data));
    }

    $('#search-form').change(function () {
    var data = $(this).serializeArray();

    var filters = [];
    for (var i in data) {
    var name = data[i].name;
    var value = data[i].value;
    if (name === 'actor' && value !== 'any') {
    filters.push('fq[0][][actor.actor_id]=' + value);
    }
    else if (name === 'tag') {
    filters.push('fq[1][][studio]=' + value);
    filters.push('fq[1][][distributor]=' + value);
    }
    }
    var url = 'search.php?' + filters.join('&');
    $.get(url, display_results);
    });
    </script>
    </html>
    Ci sono diverse cose da dire.
    All'inizio del file c'è uno script PHP che genera un vettore di tag e uno di attori. Questa parte va sostituita con un'interrogazione al database che legge entrambe le informazioni. Concretamente si tratta di eseguire un paio di query simili a
    Codice:
    SELECT id, nome FROM actor;
    SELECT studio, distributor FROM film;
    (per studio e distributor servirà poi un minimo di postprocessing in PHP, analogo a quanto visto qualche messaggio fa).

    Poi comincia la parte HTML. Ho utilizzato un minimo di CSS giusto per rendere la pagina presentabile, puoi cambiarlo a piacimento.

    La parte del form usa i vettori $tags e $actors per far comparire una select con gli attori su cui filtrare (oppure "nessun filtro", di default) e la lista dei tag selezionabili. Anche qui nulla di speciale, puoi eventualmente modificarlo, prestando attenzione ai nomi dei campi che dovranno poi corrispondere a quelli usati nel resto del codice (JavaScript).

    Vengono quindi inserite due librerie JavaScript: jQuery per le chiamate AJAX, e Handlebars per mostrare i risultati.

    C'è poi uno script Handlebars:
    Codice:
    <script id="search-results-template" type="text/x-handlebars-template">...</script>
    si tratta di un template, al suo interno ci va l'HTML che verrà applicato a ogni film presente tra i risultati della ricerca. La sintassi è abbastanza semplice, tutto quello che compare tra doppie parentesi graffe viene preso dal JSON, per esempio {{movie_title}} viene rimpiazzato dal valore del campo movie_title del JSON restituito dalla ricerca. Per gli altri dettagli puoi dare un'occhiata alla documentazione di Handlebars.

    Infine c'è la parte JavaScript: ci sono un paio di istruzioni di Handlebars necessarie per inizializzarlo, poi la parte più interessante in $('#search-form').change(function () {...}: questo event listener legge le informazioni inserite nel form ogni volta che clicchi/modifichi qualcosa, le usa per costruire un URL e si serve di quest'ultimo per interrogare la pagina search.php. Il risultato ottenuto (che è un JSON) viene passato a Handlebars (tramite la funzione di callback display_results), il quale provvederà a mostrare i risultati.

    Nulla di tutto questo è testato, per il solito motivo che non ho il database su cui fare le prove

    e raro trovare di questi tempi gente che ti aiutano, specialmente con un principiante come me,

    tu sei un'eccezione (insieme a darbula e GraphOGLRisorse)
    Non scordarti di alemoppo: il più delle volte, se non risponde, è solo perché darbula, GraphOGLRisorse e io lo battiamo sul tempo .
    Ultima modifica di mzanella : 30-11-2020 alle ore 19.04.33
    blackskyisback likes this.

    I suggerimenti che do più spesso:


  5. #65
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Questo è un punto di partenza:
    Codice PHP:
    <?php
    $tags
    = ['Universal', 'X', 'Y', 'Z'];
    $actors = [
    [
    'id' => 1,
    'name' => 'Anna Abbott'
    ],
    [
    'id' => 2,
    'name' => 'Bett Birningham'
    ],
    [
    'id' => 3,
    'name' => 'Charlotte Cheen'
    ]
    ];
    ?>
    <html>
    <head>
    <title>Search page</title>
    <style>
    form {
    width: 1024px;
    max-width: 80%;
    margin: auto;
    }

    label {
    display: block;
    }

    fieldset {
    margin: 1em auto 0.5em auto;
    }

    #result-container {
    width: 1024px;
    max-width: 80%;
    margin: auto;
    }

    #result-container h2 {
    margin-bottom: 0;
    }

    #result-container small {
    color: #666;
    font-style: italic;
    }

    article {
    border: 1px solid #666;
    padding: 1em;
    border-radius: 1em;
    margin-bottom: 0.5em;
    }

    .synopsis {
    font-size: 0.9em;
    }
    </style>
    </head>

    <body>
    <form id="search-form">
    <label>
    Cerca film con questo attore:
    <select name="actor">
    <option value="any">Nessun filtro</option>
    <?php foreach ($actors as $actor): ?>
    <option value="<?php echo $actor['id']; ?>"><?php echo $actor['name']; ?></option>
    <?php endforeach; ?>
    </select>
    </label>

    <fieldset>
    <legend>Cerca film con almeno uno dei seguenti tag</legend>
    <?php foreach ($tags as $tag): ?>
    <label>
    <input name="tag" type="checkbox" value="<?php echo $tag; ?>"> <?php echo $tag; ?>
    </label>
    <?php endforeach; ?>
    </fieldset>
    </form>

    <div id="result-container">
    </div>


    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/handlebars@latest/dist/handlebars.js"></script>
    <script id="search-results-template" type="text/x-handlebars-template">
    <h2>Risultati ricerca</h2>
    <small>{{header.result_count}} risultati in {{header.time}} ms</small>
    {{#each results}}
    <article>
    id: {{film_id}}<br>
    title: {{movie_title}}<br>
    genre: {{genre}}<br>
    <div class="synopsis">{{{synopsis}}}</div>
    </article>
    {{else}}
    <p>Nessun risultato</p>
    {{/each}}
    </script>

    <script>
    var result_container = $('#result-container');
    var source = document.getElementById("search-results-template").innerHTML;
    var template = Handlebars.compile(source);

    function display_results(data) {
    result_container.html(template(data));
    }

    $('#search-form').change(function () {
    var data = $(this).serializeArray();

    var filters = [];
    for (var i in data) {
    var name = data[i].name;
    var value = data[i].value;
    if (name === 'actor' && value !== 'any') {
    filters.push('fq[0][][actor.actor_id]=' + value);
    }
    else if (name === 'tag') {
    filters.push('fq[1][][studio]=' + value);
    filters.push('fq[1][][distributor]=' + value);
    }
    }
    var url = 'search.php?' + filters.join('&');
    $.get(url, display_results);
    });
    </script>
    </html>
    questo devo inserirlo in search.php a quanto ho capito, in alto, o mi sbaglio?


    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Non scordarti di alemoppo: il più delle volte, se non risponde, è solo perché darbula, GraphOGLRisorse e io lo battiamo sul tempo .
    sorry, mi ero dimenticato di lui, certo anche alemoppo

  6. #66
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    questo devo inserirlo in search.php a quanto ho capito, in alto, o mi sbaglio?
    No no, è una pagina separata che puoi chiamare come vuoi.

    I suggerimenti che do più spesso:


  7. #67
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    hai ragione, adesso ho notato questo

    var url = 'search.php?' + filters.join('&');


    non mi e' chiaro questo pezzo

    Codice PHP:

    <?php
    $tags
    = ['Universal', 'X', 'Y', 'Z'];
    $actors = [
    [
    'id' => 1,
    'name' => 'Anna Abbott'
    ],
    [
    'id' => 2,
    'name' => 'Bett Birningham'
    ],
    [
    'id' => 3,
    'name' => 'Charlotte Cheen'
    ]
    ];
    ?>
    se io volessi inserire questa query ? dove va' dato che vedo id e name (che sarebbe nome)

    Codice PHP:
    <?php

    require_once("connetti.php");


    $query = mysql_query ("SELECT * FROM actor ");

    $row = mysql_fetch_array ($query);

    ?>

  8. #68
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Dovresti sostituire
    Codice PHP:
    $actors = [
    [
    'id' => 1,
    'name' => 'Anna Abbott'
    ],
    [
    'id' => 2,
    'name' => 'Bett Birningham'
    ],
    [
    'id' => 3,
    'name' => 'Charlotte Cheen'
    ]
    ];
    con
    Codice PHP:
    $query = 'SELECT id, nome FROM actor';
    $result = mysql_query($query);
    if (
    $result === false) {
    die(
    'Cannot execute query: ' . mysql_error());
    }
    $actors = [];
    while (
    $row = mysql_fetch_assoch($result)) {
    $actors[] = [
    'id' => $row['id'],
    'name' => $row['nome']
    ];
    }

    I suggerimenti che do più spesso:


  9. #69
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    dunque, ho fatto cosi

    Codice PHP:
    <?php

    require_once("connetti.php");

    ?>
    Codice PHP:
    <?php
    $tags
    = ['Universal', 'X', 'Y', 'Z'];
    $query = 'SELECT actor_id, nome FROM actor';
    $result = mysql_query($query);
    if (
    $result === false) {
    die(
    'Cannot execute query: ' . mysql_error());
    }
    $actors = [];
    while (
    $row = mysql_fetch_assoch($result)) {
    $actors[] = [
    'id' => $row['actor_id'],
    'name' => $row['nome']
    ];
    }
    ?>
    stranamente mi visualizza un errore

    Codice PHP:

    Fatal error
    : Call to undefined function mysql_fetch_assoch() in E:\OpenServer\domains\cinema\members\search_form.php on line 17
    line 17

    Codice PHP:
    while ($row = mysql_fetch_assoch($result)) {

  10. #70
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    trovato l'errore, era questo

    Codice PHP:
    mysql_fetch_assoch
    sostituito con

    Codice PHP:
    mysql_fetch_assoc
    rimane questa parte di codice


    Codice PHP:
    $tags = ['Universal', 'X', 'Y', 'Z'];
    grazie e' poco
    Ultima modifica di blackskyisback : 30-11-2020 alle ore 20.56.30

  11. #71
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Mea culpa, si scrive mysql_fetch_assoc senza h.

  12. #72
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    rimane questa parte di codice
    I pezzi mi pare siano disseminati nei messaggi precedenti. Mettendo insieme al precedente viene fuori qualcosa come:
    Codice PHP:
    <?php
    require_once "connetti.php";

    // Reads tags
    $query = 'SELECT distributor, studio FROM film';
    $result = mysql_query($query);
    if (
    $result === false) {
    die(
    'Cannot execute query: ' . mysql_error());
    }
    $tags = [];
    while (
    $row = mysql_fetch_assoc($result)) {
    $tags = array_merge(
    $tags,
    array_filter(array_map('trim', explode(',', $row['studio']))),
    array_filter(array_map('trim', explode(',', $row['distributor'])))
    );
    }
    $tags = array_unique($tags);

    // Reads actors
    $query = 'SELECT actor_id, nome FROM actor';
    $result = mysql_query($query);
    if (
    $result === false) {
    die(
    'Cannot execute query: ' . mysql_error());
    }
    $actors = [];
    while (
    $row = mysql_fetch_assoc($result)) {
    $actors[] = [
    'id' => $row['actor_id'],
    'name' => $row['nome']
    ];
    }
    ?>
    Ultima modifica di mzanella : 01-12-2020 alle ore 17.25.30
    blackskyisback likes this.

    I suggerimenti che do più spesso:


  13. #73
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    funziona

    volevo chiederti come mai non hai utilizzato DataTables, forse era piu' efficace per filtrare la lista attori
    una ricerca simile a quella su Google in cui inserisci una lettera e viene filtrato subito

    comunque GRAZIE di cuore, sei stato fantastico e diponibile

    ci sarebbe un'altra questione sul filtraggio dell'eta' ma penso che e' meglio aprire una nuova discussione

  14. #74
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Figurati, è stato un piacere

    volevo chiederti come mai non hai utilizzato DataTables, forse era piu' efficace per filtrare la lista attori
    Una cosa non esclude l'altra . Il meccanismo base di ricerca per attore ora c'è, si tratta di selezionarne l'id da una select. Se al posto della select preferisci un sistema più elaborato in JavaScript (magari con una ricerca integrata sul nome) puoi sempre aggiungerlo.

    I suggerimenti che do più spesso:


  15. #75
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    ok, capito , si ora con le basi penso di riuscire anche con datatables

    adesso apro una discussione sul filtro dell'eta'

Pagina 3 di 3 PrimoPrimo 123

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •