Jump to content
php.lv forumi

Pieduriens

Reģistrētie lietotāji
  • Posts

    128
  • Joined

  • Last visited

Posts posted by Pieduriens

  1. Skaidrs. text ir vienkārši kā strings, bet man vajag array ko pēc tam padod PHP json_decode.

    Vai Tavai funkcijai: function conv(data) ir iespēja pielikt klāt position?

    Piemēram:

    [
    {"id":1,"pid":0,"position":100}, // Pirmais roots
    {"id":4,"pid":1,"position":100}, // Pirmais sub roots
    {"id":5,"pid":1,"position":101}, // Otrais sub roots
    {"id":2,"pid":0,"position":101}, // Otrais roots
    {"id":3,"pid":0,"position":102}, // Treshais roots
    ]
    

    Tiku galā:

            function conv(data){
                var result=[];
                function dfs(node, parent) {        
                    for(var i in node){
                        result.push({id:node[i].id,pid:parent,position:position});
                        position++;
                        if (node[i]['children']) dfs(node[i]['children'],node[i]['id']);
                    }
                }
                var position=100;
                dfs(data, 0);
                return result;
            }
    
  2. Super ! Vienkārši super..Client Side Must Have!

    Tik kad lieku lai nolasītu saturu no textarea.

    Ar statiski definētu var protams viss ir ideāli :)

    var data= $("textarea#nestable_list_1_output").val();
    

    tieku outputā pie:

    
    [{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0},{"pid":0}]
    
  3. Paldies F3llony par padomu. Taču vēlos attīstīt šo:

     

    Uzrakstīju kā tam itkā loģiski vajadzētu izskatīties, bet šis nav ejošs:

    $string = '[{"id":1,"children":[{"id":4}]},{"id":2}]';
    $data   =  json_decode($string, true);
    $menu = array();
    
    function build_menu($data, $i = 0){
        foreach ($data as $items){
        $i++; 
            
            if(array_key_exists("children",$data)){
                foreach ($items as $item){
                array_push($menu, $item['id']);   
                build_menu($menu, $i);
                }
            }
            else{
                array_push($menu, $items['id']);  
            } 
        }
        return $menu;
    }
    
    $menu = build_menu($data);
    var_dump($menu);
    
  4. Tu jauc child ar parent. Item 4 parent ir Item 1.

    Ja tev būtu child, tad būtu Item 1 children = [4] (jābūt masīvam, jo var būt vairāki child itemi).

    ja var but vairaki, tacu planoju tos vairakus child itemus kartot ar position vertibu.

  5. Labdien.

    Saskāros ar problēmu, kuru nespēju ļoģiski atrisināt.

     

    Tātad esmu izveidojis ar Jūsu palīdzību Nestable list menu (http://php.lv/f/topic/21576-sub-array-menu/).

     

    Tālāk scenārijs paredz, pēc tabulas sakārtošanas ar jquery nestable, serialize izvadi: 

    [{"id":1,"children":[{"id":4}]},{"id":2}]
    

    Pēc json_decode iegūstu array:

    Array
    (
        [0] => Array
            (
                [id] => 1
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 4
                            )
                    )
            )
        [1] => Array
            (
                [id] => 2
            )
    )
    

    Kā sakārtot array tā lai iegūtu ko līdzīgu:

    $menu = array(
                      array( 'name' => 'Item 1',  'id' => '1' ,'children' => '0'), 
                      array( 'name' => 'Item 4',  'id' => '4' ,'children' => '1'),  
                      array( 'name' => 'Item 3',  'id' => '3' ,'children' => '0'), 
                  );
    

    Kā arī turpmākais loģiskais risinājums.

    Tabula satur rindās visu menu izskatu( kārtību utt). Liekas ka izmantojot nestable list, pirms menu updeita, man būtu jāiztīra visa db tabula lai updeitotu to?

    Paldies.

     

    UPDATE

     

    Tur, kur 'children' => '0' , tā ir root kategorija ( Item1, Item 3 ir root kategorijas )

    Tur, kur 'children' => 'nav 0' children ir augstākas kategorijas id. ( Item2 ir sub zem Item 1)

  6. Ok tiktāl taka būtu. Taču kādēļ klāt nācis $levelam: *4, un *4+2 ?

     

    Reāli jūtos mazliet apjucis..

     

    Vēlos šo izmantot, lai varu ubūvēt nestable list, bet izskatās ka tur style strutūra ir savādāka:

    
        <li data-id="1" class="dd-item"><button type="button" data-action="collapse">Collapse</button><button type="button" data-action="expand" style="display: none;">Expand</button>
                <div class="dd-handle">Item 1</div>
        <ol class="dd-list"><li data-id="11" class="dd-item">
                <div class="dd-handle">Item 11</div>
        </li></ol></li>
        <li data-id="2" class="dd-item"><button type="button" data-action="collapse">Collapse</button><button type="button" data-action="expand" style="display: none;">Expand</button>
                <div class="dd-handle">Item 2</div>
                <ol class="dd-list">
                        <li data-id="3" class="dd-item"><button type="button" data-action="collapse">Collapse</button><button type="button" data-action="expand" style="display: none;">Expand</button>
                                <div class="dd-handle">Item 3</div>
                        <ol class="dd-list"><li data-id="9" class="dd-item">
                                <div class="dd-handle">Item 9</div>
                        </li></ol></li>
    
                </ol>
        </li>
    
        <li data-id="5" class="dd-item"><button type="button" data-action="collapse">Collapse</button><button type="button" data-action="expand" style="display: none;">Expand</button>
            <div class="dd-handle">Item 5</div>
            <ol class="dd-list">
                    <li data-id="6" class="dd-item"><button type="button" data-action="collapse">Collapse</button><button type="button" data-action="expand" style="display: none;">Expand</button>
                            <div class="dd-handle">Item 6</div>
                    <ol class="dd-list"><li data-id="7" class="dd-item"><button type="button" data-action="collapse">Collapse</button><button type="button" data-action="expand" style="display: none;">Expand</button>
                            <div class="dd-handle">Item 7</div>
                    <ol class="dd-list"><li data-id="8" class="dd-item"><button type="button" data-action="collapse">Collapse</button><button type="button" data-action="expand" style="display: none;">Expand</button>
                            <div class="dd-handle">Item 8</div>
                    <ol class="dd-list"><li data-id="10" class="dd-item">
            <div class="dd-handle">Item 10</div>
    </li></ol></li></ol></li></ol></li>
    
    
            </ol>
      </li>
    
  7. Ok, kā atsevišķa klase ārpus CI sistēmas viss Codez koks strādā.

    Taču pievienojot Codez Menu klasi CI sistēmas library, ar echo rezultāti izvadās pirm html taga, ( ar return nestrādā

    Cik saprotu ir jāizveido $outputs ar un tad jāatgriež, taču tādā gadijumā tieku tikai pie:

    <ol class="dd-list"> PHPHTML </ol>
    

    Library Menu Clase:

    Class Menu{
      public $item=array();
      public $root=array();
      public function set($data){
        foreach($data as $item){
          $this->items[$item['id']]=$item;
          $this->items[$item['id']]['childs']=array();
        }
        foreach($data as $item){
          if($item['pid']==0){
            array_push($this->root,$item['id']);   
          } else {    
            array_push($this->items[$item['pid']]['childs'],$item['id']);
          }
        }
      }
      function show($ids,$level=0){ 
        $output = '';
        foreach($ids as $id){
          $output .= str_repeat('<ol class="dd-list"><li class="dd-item"><div class="dd-handle">',$level).$this->items[$id]['name'].str_repeat('</div></li></ol>',$level);
            
          $this->show($this->items[$id]['childs'],$level+1);
        }
        return $output;
      }
    }
    
    

    Controlieris:

        public function index(){
            $this->load->library('menu'); // <-- Codez Klase
               
            $a = $this->navigation_model->render_menu_array();     
            $b = $this->menu->set($a);
            $this->data['menu'] = $this->menu->show($this->menu->root);
            $this->render_page('admin/navigation');
    
        }
    
    
    

    Ko daru nepareizi?

    Paldies.

  8. Labvakar.

    Cīnos ar funkciju, kas veido Nestable List no array.

     

    Pašlaik ir izveidots arrays no kura mēģinu būvēt menu, bet loģiskajā shēmā tieku tikai līdz 2lvl menu items.

    Cenšos rakt tālāk, bet zem 2lvl sub netieku.

    Kur un kā likt nākamos blokus?

     

    DB:

    name       |id|url| position |  parent_id
    ---------------------------------------------------------------------
    PHP         1  url    100            0  
    CodeIgniter 4  url    100            1
    HTML        10 url    100            0
    CSS         11 url    100            10
    Inline      12 url    100            11
    Python      2  url    101            12
    

    PHP:

    public function create_menu()
    {
        $this->db->order_by('position', 'asc'); 
        $query = $this->db->get('navigation');
        $output = '';
        $i = 0;
    
        foreach ($query->result_array() as $menuss){
        $i++;    
             $menu[$i]['id']           = $menuss['id'];      
             $menu[$i]['key']          = $menuss['parent_id'];      
             $menu[$i]['name']         = $menuss['name'];      
             $menu[$i]['url']          = $menuss['url'];      
             $menu[$i]['position']     = $menuss['position'];      
        }
        foreach  ($menu as $item)
        {
        $output .=   '<li data-id="'.$item['id'].'" class="dd-item">';    
            if ($item['key'] == 0) // root category
             {    
                $output .=      '<div class="dd-handle">'.$item['name'].'</div>';
             }
            else{
                ############SUB###############
                $output .= '<ol class="dd-list"><li data-id="'.$item['id'].'" class="dd-item">';
                $output .= '<div class="dd-handle">'.$item['name'].'</div>';
                $output .= '</li></ol>';
                ############SUB###############
            }    
        
            
            
        $output .=   '</li>';
        }   
        
       return $output;
        
        
    }
    
    

    Paldies par ieteikumiem ;)

    Pieduriens.

  9. Ok, vajadzēja būt nedaudz konkrētākam..

    Ir Masīvs: http://pastebin.com/weCm73Av

     

    Trīs iespējamās varbūtības.

    1):

    [default_billing] => 4

    [default_shipping] => 5
     
    2):
    [default_billing] => 
    [default_shipping] =>

     

    3)

    [default_billing] => 6

    [default_shipping] => 6

     

    Scenārijs, bēc id iegūšanas mans arrays tiek papildīnāts ar $array[$i]['shipping']

    kā arī ja id atskjiras ar $array[$i]['billing']

     

  10. Labvakar!

    Vai nu ir pārāk vēls, acis izkaltušas un galva pārkarsusi, bet nekādi nevaru salikt konstrukciju..

     

    // Ja id divos laukos nav norādīts, tad apakš foreach nav jāpilda..
    // Ja id divos laukos ir vienāds, tad jāpilda viena sekcija
    // Ja id divos laukos ir dažāds, tad jāpilda otra sekcija.
     

    Šie trīs punkti būtu viegli izpildāmi izmantojot parastu elseif, bet klāt nāk:

     

    // Ja vienā no diviem laukiem ir id, izmantot to id kurš ir aizpildīts.

     

    Paldies ;)

  11. Mūžu senā bet noderīgā funkcija array apskatei normālā skatā ar <pre> tagiem.

    function printr($var){
    echo "<pre>";
    print_r($var);
    echo "</pre>";
    }

    Kā arī kautkas prieciņam :)

    function skaitamAitas($aitas){
        $i = 1;
        while ( $i <=$aitas ) {
           echo $i++ .'. aita<br>';
        }
    }
    
  12. Sveiki..

    Mācību ietvaros cīnos ar vienu loģisko algoritmu..

     

    http://pastebin.com/D3N38Gas

     

    Vēlos iestāstīt, ka pie nosacījuma, ja šāda vērtība eksistē piekabina klāt stringam +1...

    Analoģiski kā WP, kur, ja slugs eskistē, tad WP pats pielik klāt unikālu galotni...

     

    Pašlaik strādā līdz trešajai reizei..

    1) adrese

    2) adrese-2

    3) šo jau rāda tā pat: adrese-2, (vajadzētu adrese-3 utt...)

     

    Ceru, ka problēmu var saprast...

    Paldies...

  13. Visi kaut ko cep :) Arī vēlos padalīties..uzrakstīju aiz gara laika :)

     

    $url = 'http://www.bank.lv/vk/xml.xml';
    $xml = file_get_contents($url);
    $xml = simplexml_load_string($xml);
    $simbol = $xml->Currencies->Currency[10]->ID;
    $rate 	= $xml->Currencies->Currency[10]->Rate;
    echo $simbol.': '.$rate; 
    

     

    (Currency "10'" ir priekš EUR)

  14. Vairāk ticams ir 2. :D

    Jā, ir otrais.

     

    Izmantoju Magneto 1.7.0.2 CE.

    Visi faili kur, kur sastopama šī "figņa"

    .../httpdocs/old/app/code/community/VladimirPopov/WebForms/Block/Adminhtml/Fields/Edit.php

    .../httpdocs/old/app/code/community/VladimirPopov/WebForms/Block/Adminhtml/Webforms.php

    .../httpdocs/old/app/code/community/VladimirPopov/WebForms/Block/Adminhtml/Webforms/Edit.php

    .../httpdocs/old/includes/src/VladimirPopov_WebForms_Block_Adminhtml_Webforms_Edit.php

    .../httpdocs/old/includes/src/VladimirPopov_WebForms_Block_Adminhtml_Fields_Edit.php

    .../httpdocs/old/includes/src/VladimirPopov_WebForms_Block_Adminhtml_Webforms.php

    .../httpdocs/old/app/code/community/VladimirPopov/WebForms/Block/Adminhtml/Fields/Edit.php

    .../httpdocs/old/app/code/community/VladimirPopov/WebForms/Block/Adminhtml/Webforms.php

     

    Visvairāk interesē, kā šis viss tur ir uzradies?

    1. Laikā, kad bija izmantota old versija.

    2. uz httpdocs (root dir) stāv jail break permisijas.

    3. Negribas ticēt, ka *Vladimirs Popovs* pats iemānijis šo "haku" jau modulī, pie moduļa instalācijas..

     

    Baigās pārdomas :D

×
×
  • Create New...