Filter dokumentov na stránke

Programovacie jazyky, rady, poradňa...
pitbullko
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 294
Registrovaný: 13 nov 2009, 8:19
Bydlisko: „Keby som bol postavený pred rozhodnutie medzi zbabelosťou a násilím, zvolil by som násilie“[Gandhi]

Filter dokumentov na stránke

Príspevok od používateľa pitbullko »

Ahojte,
potreboval by som vytvoriť filter dokumentov z elementov "DropDown list" podľa ktorého by sa generovala tabuľka, ktorá by zobrazovala informácie podľa danej kombinácie filtra.
Dnes sa mi podarilo vytvoriť filter: http://obkladanie.eu/evidencia.php Zatiaľ sú filtre dva, no budú štyri.
Kód:

Kód: Vybrať všetko

<html>
    <head>
    <script type="text/javascript">        
    function makeDisable(index){
        if((index==1)||(index==2)){
            var x=document.getElementById("platnost");
            x.disabled=true;
        }else{
            var x=document.getElementById("platnost");
            x.disabled=false;                        
        }
    }
    </script>
    </head>
    <body>
        <form action="evidencia.php" method="post">
            <select id="usek" name="usek" onchange="makeDisable(this.options[this.selectedIndex].value)">
                <option value="0">Všetky</option>
                <option value="1">Finančný úsek</option>
                <option value="2">Nákup</option>
                <option value="3">Predaj</option>
            </select>
            &nbsp;&nbsp;&nbsp;
            <select id="platnost" name="platnost">
                <option value="0">Všetky</option>
                <option value="1">Platné</option>
                <option value="2">Neplatné</option>
            </select>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <input type="submit" value="Submit" />
        </form>
        <?php
        if(isset ($_POST["usek"])){        
            $usek = $_POST["usek"];
            echo $usek."<br />";
        ?>        
            <script type="text/javascript">
                for (i=0; i<document.getElementById("usek").length;i++){
                    if (<?php echo $usek ?> == document.getElementById("usek").options(i).value){
                        document.getElementById("usek").options(i).selected = true;
                    }                
                }
                if((<?php echo $usek ?> ==1)||(<?php echo $usek ?> ==2)){
                    var x=document.getElementById("platnost");
                    x.disabled=true;
                }
            </script>        
        <?php             
        }
        ?>
    </body>
</html>
Generovanie tabuľky bude v if(isset ($_POST["usek"])){}.
S PHP práve začínam, JavaScript tiež moc neovládam, no rád by som uvítal pripomienky k syntaxi, štruktúre, vhodnejšie riešenie...
Ďakujem
Prílohy
filter.png
filter.png (1.94 KiB) 311 zobrazení
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Filter dokumentov na stránke

Príspevok od používateľa audiotrack »

v tej funkcii tú premennú x definuješ v oboch vetvách, takže sa to dá spraviť ešte pred podmienkou:

Kód: Vybrať všetko

<script type="text/javascript">       
    function makeDisable(index){
        var x=document.getElementById("platnost");
        if((index==1)||(index==2)){
            x.disabled=true;
        }else{
            x.disabled=false;                       
        }
    }
    </script>
a ešte krajšie je tam rovno priradiť ten výraz, takže celá funkcia by bola:

Kód: Vybrať všetko

function makeDisable(index){
  document.getElementById("platnost").disabled = ((index==1)||(index==2));
}
to asi k tomu javascriptu. V html mi vadí jedine toto:

Kód: Vybrať všetko

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
také čosi sa nerobí, použi css a naštýluj si tú medzeru

ten druhý javascript celý vyhodiť, a vybranú položku sprav priamo v php štýlom:

Kód: Vybrať všetko

.
.
.
.
<option value="0" <?php if($_POST['usek'] == 0) echo 'selected="selected"'; ?>>Všetky</option>
.
.
pitbullko
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 294
Registrovaný: 13 nov 2009, 8:19
Bydlisko: „Keby som bol postavený pred rozhodnutie medzi zbabelosťou a násilím, zvolil by som násilie“[Gandhi]

Re: Filter dokumentov na stránke

Príspevok od používateľa pitbullko »

Vďaka audio za vecné pripomienky. Presne také niečo ma zaujímalo.
Prvá časť druhého JavaScriptu zabezpečuje to, že po nastavení filtra a odoslaní v ňom ostanú tie isté hodnoty - aby užívateľ vedel, čo má zobrazené, aby sa filter neresetoval.
Vo filtri by mala byť taká vlastnosť, že ak sa vyberie určitá možnosť v prvom DropDown liste, ostatné sa zablokujú. Teda napr. pri "Finančný úsek" nebude možné zvoliť platnosť. Druhá časť toho JavaScriptu slúži na to, aby aj po odoslaní ostal tento DropDown list zablokovaný.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Filter dokumentov na stránke

Príspevok od používateľa audiotrack »

ja viem veľmi dobre na čo to slúži, nepozerám sa na js/html/php prvýkrát :)
Ale ty by si si mal ešte raz prečítať čo som písal. Ten javascript je tam zbytočný. Po odoslaní si vieš tieto odoslané hodnoty rovno navoliť v tom selecte štýlom, aký som napísal v poslednom code tagu. Nechcelo sa mi to robiť pre všetky položky, tak som ukázal iba pre jednu. Rovnako aj to "zneplatnenie" druhého filtra vieš spraviť cez php. Snaž sa minimalizovať množstvo javascriptu na stránkach
pitbullko
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 294
Registrovaný: 13 nov 2009, 8:19
Bydlisko: „Keby som bol postavený pred rozhodnutie medzi zbabelosťou a násilím, zvolil by som násilie“[Gandhi]

Re: Filter dokumentov na stránke

Príspevok od používateľa pitbullko »

Tak podarilo sa mi odstrániť ten druhý JavaScript ako si mi poradil :) .
Takže takto to vyzerá teraz:

Kód: Vybrať všetko

<html>
    <head>
    <script type="text/javascript">        
    function makeDisable(index){
        document.getElementById("platnost").disabled = ((index==1)||(index==2));
    }
    </script>
    </head>
    <body>
        <form action="evidencia.php" method="post">
            <select id="usek" name="usek" onchange="makeDisable(this.options[this.selectedIndex].value)">
                <option value="0" <?php if(isset ($_POST["usek"])){if($_POST['usek'] == 0) echo 'selected="selected"';} ?>>Všetky</option>
                <option value="1" <?php if(isset ($_POST["usek"])){if($_POST['usek'] == 1) echo 'selected="selected"';} ?>>Finančný úsek</option>
                <option value="2" <?php if(isset ($_POST["usek"])){if($_POST['usek'] == 2) echo 'selected="selected"';} ?>>Nákup</option>
                <option value="3" <?php if(isset ($_POST["usek"])){if($_POST['usek'] == 3) echo 'selected="selected"';} ?>>Predaj</option>
            </select>
            <select id="platnost" name="platnost" <?php if(isset ($_POST["usek"])){if($_POST['usek'] == 1 || $_POST['usek'] == 2) echo 'disabled="disabled"';} ?>>
                <option value="0">Všetky</option>
                <option value="1">Platné</option>
                <option value="2">Neplatné</option>
            </select>
            <input type="submit" value="Zobraziť" />
        </form>
        <?php
        if(isset ($_POST["usek"])){        
            $usek = $_POST["usek"];
            echo $usek."<br />";            
        }
        ?>
    </body>
</html>
K tej minimalizácií JavaScriptu. Myslel som, že to je práve naopak. Nie je lepšie všetko spraviť, teda ak sa dá na strane klienta a teda menej zaťažovať server?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Filter dokumentov na stránke

Príspevok od používateľa audiotrack »

pitbullko napísal:...Nie je lepšie všetko spraviť, teda ak sa dá na strane klienta a teda menej zaťažovať server?
nie
Napísať odpoveď