Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Scream
    Registrato dal
    Apr 2002
    Messaggi
    228

    creare array multidimensionale da liste ul

    Ciao a tutti vorrei trasformare una cosa come questa:
    codice:
    <ul>
      <li>Link 1</li>
      <li>Link 2
        <ul>
          <li>Sublink A</li>
          <li>Sublink B</li>
        </ul>
      </li>
      <li>Link 3
        <ul>
          <li>Sublink C</li>
        </ul>
      </li>
    </ul>
    In questo:
    Codice PHP:
    array(
      [
    0] => array(
        [
    id]       => 1,
        [
    nome]  => 'Link 1',
        [
    parent] => NULL,
      ),
      [
    1] => array(
        [
    id]       => 2,
        [
    nome]  => 'Link 2',
        [
    parent] => NULL,
      ),
      [
    2] => array(
        [
    id]       => 3,
        [
    nome]  => 'Sublink A',
        [
    parent] => 2
      
    ),
      [
    3] => array(
        [
    id]       => 4,
        [
    nome]  => 'Sublink B',
        [
    parent] => 2
      
    ),
      [
    4] => array(
        [
    id]       => 5,
        [
    nome]  => 'Link 3',
        [
    parent] => NULL
      
    ),
      [
    5] => array(
        [
    id]       => 6,
        [
    nome]  => 'Sublink C',
        [
    parent] => 3
      
    )

    Questo poi dovrà essere convertito nuovamente in una lista, ma con classi e link generati autonomamente. In pratica vorrei fare in modo che da un elenco puntato si possa creare un menù con relativi sottomenù (anche ricorsivi se necesario).

    Qualcuno ha già avuto necessità del genere?

  2. #2
    ma l'elenco da dove arriva?
    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    Utente di HTML.it L'avatar di Scream
    Registrato dal
    Apr 2002
    Messaggi
    228
    L'elenco lo inserisce un utente tramite ckeditor. Tuttavia non conosce nulla di classi e link e non voglio che ne sappia nulla.

  4. #4
    Utente bannato
    Registrato dal
    Apr 2009
    Messaggi
    530
    Per fare il tutto in puro PHP dovremmo partire da una situazione del genere:
    codice:
    <li>Link 1 <input type="hidden" name="nomearray[]" value="Link 1"></li>
    cioè ri-avere il contenuto degli list items anche in dei campi INPUT, che possono essere del tipo HIDDEN e quindi non visibili; e che possono trovarsi anche in un blocco a parte fuori dalla lista: io l'ho messo "in linea" solo per esempio.

    La square bracket notation del NAME che può sembrarti ostrogota in realtà facilita le cose: fa assumere a PHP che, trovando campi con NAME identici, deve trattarli come array.


    Altrimenti c'è la via del JavaScript che può recuperare client-side il contenuto delle liste, e poi inviarli tramite aiax o popolarci dei campi e tornare alla situazione predetta. JS può però trovarsi disabilitato su alcuni browser ver volontà dell' utente.

  5. #5
    la strada piu diretta sarebbe quella di ampliare ckeditor e quando un utente inserisce una lista ci fai un paio di funzioni ad hoc..

    altrimenti senza toccare ckeditor potresti intervenire sul messaggio al momento dell'invio cosi ti parsi solamente la porzione di testo che ti serve..

    oppure intervieni quando il messaggio è stato inviato ma il parsing sarebbe su una pagina completa con il rischio di intaccare anche altre liste..

    mi sfugge l'utilità di questa cosa.
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Utente di HTML.it L'avatar di Scream
    Registrato dal
    Apr 2002
    Messaggi
    228
    Sto semplicemente cercando di realizzare un piccolo CMS senza database ecc.
    Siccome vorrei che anche il menù si possa "personalizzare" aggiungendo/rimuovendo voci, il modo più semplice (visto che uso twitter-bootstrap) è quello di far creare delle liste... una volta fatte, le metto in un array multidimensionale (per avere sottovoci ricorsive) e poi ricreare l'elenco impostando le dovute classi.

  7. #7
    se è un menu ci sarà anche un link immagino.. come fai a ricavare il link dalla lista inserita dall'utente..?

    un cms senza database è un controsenso.. imho

    dove salveresti i vari menu che i tuoi utenti inseriscono?
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Utente di HTML.it L'avatar di Scream
    Registrato dal
    Apr 2002
    Messaggi
    228
    in un semplice file html. già ora salvo il file e quando lo richiamo con un include ho una funzione che converte ogni testo compreso nel tag <li> in <li><a href="testo">testo</li>
    Il problema è che quando ho sottoliste, il menù non presenta il sottomenù

  9. #9
    quindi hai già una funzione che fa la lista di link

    ipotizzo:

    la lista
    Codice PHP:
    <ul>
      <
    li>Link 1</li>
      <
    li>Link 2
        
    <ul>
          <
    li>Sublink A</li>
          <
    li>Sublink B</li>
        </
    ul>
      </
    li>
      <
    li>Link 3
        
    <ul>
          <
    li>Sublink C</li>
        </
    ul>
      </
    li>
    </
    ul
    l'array dovrebbe essere cosi
    Codice PHP:
    $menu = array( 
     
    => array( 'link'=>'Link 1' ),
     
    => array( 
      
    'link'=>'Link 2',
      
    'sub'=>array( 
        
    => array( 'link'=>'Sublink A' ),
        
    => array( 'link'=>'Sublink B' )
      )
     
    => array( 
      
    'link' => 'Link 3',
      
    'sub' => array(
        
    => array( 'link'=>'Sublink C' )
      )
    ); 
    poi
    Codice PHP:
    function makeList( array $data ) {
      
    $str '<ul>';
      foreach ( 
    $data AS $v ) {
        
    $sub '';
        if ( isset( 
    $v['sub'] ) ) {
          
    $sub makeList$v['sub'] );
        }
        
    $str .= '<li>' $v['link'] . $sub '</li>';
      }
      
    $str .= '</ul>';
      return 
    $str;

    l'ho fatto al volo quindi non so se funziona ma la logica è questa.. dovresti cambiare l'array a monte.

Tag per questa discussione

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 © 2025 vBulletin Solutions, Inc. All rights reserved.