Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 33
  1. #11
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    292
    up

  2. #12
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    97
    uno dei metodi più utilizzati per le webapp multilingua è questo:

    testi
    id | testo1 | testo2 | ecc..

    dove id è la chiave primaria ed essume valori tipo it, en, ecc.. e i campi contengono o le singole stringhe che utilizzi o stringhe concatenate con un separatore divise per ambiti.
    in generale quindi utilizzi un record per ogni lingua.

    nell'applicazione poi, appena definita la lingua, setti delle variabili di sessione per tutte le stringhe della lingua in uso, quindi nelle pagine utilizzi sempre e solo le variabili di sessione... così se devi aggiungere eliminare o modificare una lingua agisci solo su db senza toccare le pagine php

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    292
    Ciao Nika90,
    la struttura che mi aveva suggerita daniele_dll, è molto semplice, volevo sapere come devo inserire questi campi nel db.


    Io credo che bisogna fare così:

    TABELLA LINGUE

    id_lingua, codice_lingua, lingua.

    TABELLA NEWS

    id, id_news, id_lingua, titolo, descrizione.

    Volevo un aiuto con qualche esempio di come inserire i dati nel db. Tipo così:

    TABELLA LINGUE

    1, it, Italiano
    2,en, English
    4,fr, Francais

    TABELLA NEWS
    1,1, 1, ciao, ciao mondo
    2,1, 2, hello, hello world
    3,1, 4, bonjour, bonjour monde
    4,2, 1, il mio nome, mi chiamo Daniele
    5,2, 2, my name, my name is Daniele
    6,2, 4, mon nom, Mon nom est Daniele

    Cioè far ripetere lo stesso id (id_news) in base quante lingue sono.

    Il problema è che non riesco a far ripetere lo stesso id n volte quante sono le lingue, sapresti aiutarmi con un esempio pratico?

  4. #14
    Originariamente inviato da Nika90
    uno dei metodi più utilizzati per le webapp multilingua è questo:

    testi
    id | testo1 | testo2 | ecc..

    dove id è la chiave primaria ed essume valori tipo it, en, ecc.. e i campi contengono o le singole stringhe che utilizzi o stringhe concatenate con un separatore divise per ambiti.
    in generale quindi utilizzi un record per ogni lingua.

    nell'applicazione poi, appena definita la lingua, setti delle variabili di sessione per tutte le stringhe della lingua in uso, quindi nelle pagine utilizzi sempre e solo le variabili di sessione... così se devi aggiungere eliminare o modificare una lingua agisci solo su db senza toccare le pagine php
    no, scusami, ma sinceramente quel metodo non solo è poco utilizzato ma è considerevolmente peggiore del precedente -.-'

    Cosi devi modificare la struttura del database per variare le lingue ... ottimo
    Per questo tipo di situazioni la struttura della tabella si cerca di espanderla verticalmente e non orizzontalmente

    ------

    Originariamente inviato da m4tt86
    Ciao Nika90,
    la struttura che mi aveva suggerita daniele_dll, è molto semplice, volevo sapere come devo inserire questi campi nel db.


    Io credo che bisogna fare così:

    TABELLA LINGUE

    id_lingua, codice_lingua, lingua.

    TABELLA NEWS

    id, id_news, id_lingua, titolo, descrizione.

    Volevo un aiuto con qualche esempio di come inserire i dati nel db. Tipo così:

    TABELLA LINGUE

    1, it, Italiano
    2,en, English
    4,fr, Francais

    TABELLA NEWS
    1,1, 1, ciao, ciao mondo
    2,1, 2, hello, hello world
    3,1, 4, bonjour, bonjour monde
    4,2, 1, il mio nome, mi chiamo Daniele
    5,2, 2, my name, my name is Daniele
    6,2, 4, mon nom, Mon nom est Daniele

    Cioè far ripetere lo stesso id (id_news) in base quante lingue sono.

    Il problema è che non riesco a far ripetere lo stesso id n volte quante sono le lingue, sapresti aiutarmi con un esempio pratico?
    provo a spiegarti la procedura di inserimento in due parole:
    - viene caricata la pagina di aggiunta news
    - leggi dall'apposita tabella l'elenco delle lingue presenti nel sistema
    - per ogni lingua stampi a video un pezzo di codice HTML per inserire il testo della news in quella lingua (magari ci stampi accanto la lingua di riferimento o li stampi in un blocco a se stante sempre riferendo la lingua e cosi via)
    - una volta premuto il tasto invia tu prendi i dati via post che saranno strutturati in un modo ben preciso (lo trovi più sotto)
    - questi dati in post li elabori per come ti serve (ergo lanci uno stripslashes se magic_quote_gpc è attivo e poi lanci un mysql_real_escape_string ... ovviamente se non è in utf8 prima di lanciare l'escape lanci un htmlentities)
    - i dati cosi come sono li butti nel database tramite delle insert

    Il form che hai postato prima lo vari da cosi
    codice:
    <?php while ($row_leggi_lingue = mysql_fetch_assoc($leggi_lingue -> result)){ ?>
    
      <tr>
      
        <td><input type="text" name="titolo_[<?php echo $row_leggi_lingue['id'] ?>]"></td>
        
      </tr>
      
      <tr>
      
        <td><textarea name="descrizione_[<?php echo $row_leggi_lingue['id'] ?>]"></textarea></td>
        
      </tr>
    
    <?php } ?>
    a cosi

    codice:
    <?php while ($row_leggi_lingue = mysql_fetch_assoc($leggi_lingue->result)){ ?>
    
      <tr>
      
        <td><input type="text" name="news[<?php echo $row_leggi_lingue['id']; ?>][titolo]"></td>
        
      </tr>
      
      <tr>
      
        <td><textarea name="news[<?php echo $row_leggi_lingue['id']; ?>][testo]"></textarea></td>
        
      </tr>
    
    <?php } ?>
    Una volta che hai fatto questo giochino dentro

    $_POST['news']['1']['titolo']

    ci starà il titolo della lingua italiana e in

    $_POST['news']['1']['testo']

    ci starà il testo

    semplicemente per tirarli fuori puoi fare o un foreach si news, ovvero

    codice:
    foreach($_POST['news'] as $languageID => $newsDatas)
    {
    // $newsDatas['titolo'] contiene il titolo mentre $newsDatas['testo'] ci sta il testo ... dentro $languageID ci sta l'id della lingua
    }
    dentro il ciclo ti basta effettuare le operazioni di cui ti parlavo prima (striplslashes e mysql_real_escape_string ed un eventuale htmlentities se non usi utf8) di fare l'insert ed il gioco è fatto

    www.php.net/mysql_real_escape_string
    www.php.net/stripslashes
    www.php.net/htmlentities
    www.php.net/get_magic_quotes_gpc

    L'ultima funzione serve appunto per controllare il magic quote

    Quando devi stampare il tutto a video ti basta prendere la roba cosi come e mandarla a video

    Se ti serve avere un pseudo BBCODE, dato che questo non ti verrà toccato dall'htmlentities (le quadre, l'uguale, gli apici e cosi via sono caratteri che non vengono convertite nelle relative entità), non devi fare altro che convertirlo alla visualizzazione per tua semplice altrimenti al momento dell'inserimento, dopo che lanci l'htmlentities, converti il tutto in html cosi per la visualizzazione non ti tocca fare nulla ed ottieni il massimo delle performance
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #15
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    97
    Originariamente inviato da daniele_dll
    no, scusami, ma sinceramente quel metodo non solo è poco utilizzato ma è considerevolmente peggiore del precedente -.-'

    Cosi devi modificare la struttura del database per variare le lingue ... ottimo
    Per questo tipo di situazioni la struttura della tabella si cerca di espanderla verticalmente e non orizzontalmente
    non sono d'accordo, una volta fatta l'analisi e progettato il db in modo corretto aggiungere una lingua è una cavolata...

    volevo fare una cosa del genere anch'io... il prof mi ha detto brutte parole

    fate come volete

  6. #16
    Originariamente inviato da Nika90
    non sono d'accordo, una volta fatta l'analisi e progettato il db in modo corretto aggiungere una lingua è una cavolata...

    volevo fare una cosa del genere anch'io... il prof mi ha detto brutte parole

    fate come volete
    certo, ottimo, il prof probabilmente ti avrà detto brutte parole anche quando si parlava di reusabilità del codice e programmazione ad oggetti

    Il database, quando lo progetti, non devi PER FORZA riorganizzarlo da ZERO!!!

    Se hai un sistema di gestione delle lingue con un set di funzioni e funzionalità (o di classi) che ti gestisca il tutto perché il sistema, flessibile, proprio grazie ad una espansione verticale, lo prevede non vedo perché dovresti riscriverlo-riadattarlo OGNI volta che ti variano le lingue coinvolte

    La cosa può essere resa ancora più astratta e flessibile di come l'ha strutturata lui per adesso: io, per esempio, ho delle tabelle ad hoc che mi contengono i contenuti multilingua e le tabelle di riferimento vengono joinate per recuperare le informazioni necessarie ed in questo modo tengo il contenuto multi lingua fuori dalle tabelle (news ... articoli e cosi via ... solo una voce nelle loro relative tabelle)

    in questo modo ho un object_type ed un object_id nelle tabelle del multi lingua che mi permettono di fare tutti i collegamenti che mi pare e piace senza dover cambiare una virgola ... neanche se cambia TOTALMENTE il tipo di contenuto che devono andare a gestire (news, articoli ... immagini [anche queste devono essere multi lingua in certe situazioni] e cosi via)

    Ovviamente non ho una sola tabella che tiene dentro tutti i contenuti ma un tabella per tipologia ed in questo modo gli articoli, cosi come le categorie degli articoli od i commenti faranno riferimento alla tabella
    i18n_traslations_articles

    mentre le news

    i18n_traslations_news

    e cosi via

    dove object_type sarà, ad esempio, text, comment, image e cosi via mentre l'id sarà l'id di rifermento utilizzato nella tabella del componente che usa il multi lingua
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #17
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    97
    ok

  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    292
    Grazie daniele_dll,
    quindi dentro il db devo ripetere l'id n volte quante sono le lingue giusto?

  9. #19
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    292
    Ciao daniele_dll,
    ho fatto l'inserimento e la modifica, è troppo bello :-) sei un genio, è venuto un codice molto pulito.
    Ho un altra domanda da farti, ho fatto la modifica e funziona tutto, l'unico problema che non so gestire è che se aggiungo un altra lingua nella modifica il campo spunta e anche se lo riempio nella modifica non me lo salva, proprio perchè ovviamente il record non è stato creato, come posso risolvere questo problema?

    ecco il codice della modifica:

    Codice PHP:
    $id_post_news $_POST['id_news']; //id della news

    foreach($_POST['news'] as $languageID => $newsDatas)

    {

     
    $languageID//id lingua
     
     
    $titolo $newsDatas['titolo']; //titolo news
     
     
    $descrizione $newsDatas['testo']; //testo news
     
     
    $mod_news -> update ("news""id_lingua = '$languageID', titolo = '$titolo', descrizione = '$descrizione' WHERE id_news = '$id_post_news' AND id_lingua = '$languageID'"NULL);
     

    P.S. non fare caso a "$mod_news -> update (...);" è una classe che mi sono creato ma fa la modifica nel db.


    Grazie per il tuo favoloso aiuto

    Matt86

  10. #20
    beh, in questi casi ti conviene usare la sintassi di REPLACE più che di UPDATE perché cosi raggruppi l'inserimento e la modifica nello stesso pezzo di codice con la differenza che la modifica va solo a pre-popolare i campi al primo accesso mentre per i successivi, in entrambi i casi, i campi vanno popolati tramite i dati passati via post

    per maggiori informazioni
    http://dev.mysql.com/doc/refman/5.0/en/replace.html
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.