Autor | Zpráva | ||
---|---|---|---|
james2210 Profil |
#1 · Zasláno: 4. 3. 2014, 12:19:26
Ahojte , Potreboval by som nejak zjednoduksit kod ktory pouzivam na zoznam noviniek.
Problem je v tom ze co sa tyka programovania som zaciatocnik a spravil som to tak ako som vedel a funguje ako ma ale problem je ze cele to mam vo 4 suboroch pricom 90% kodu je kazdom uplne rovnaky. Vopred sa ale omluvam ak som to zadial do zlej temy. mena suborov: DVD.php DVD_sety.php Blu-ray.php Blu-ray_sety.php kod v suboroch <div id="blog-menu"> <div id="menu-typ"> <ul> <li><a href="filmove-dvd.php">DVD</a></li> <li><a href="filmove-dvdset.php">DVD sety</a></li> <li><a href="filmove-bluraysety.php">Blu-Ray sety</a></li> <li><a href="filmove-bluray.php">Blu-Ray </a></li> </ul> </div> <!-- end menu-typ --> </div> <!-- end blog-menu --> <div class="blog-obsah-test"> <h3>Filmové obaly</h3> <?php $alpha = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); //LISTS TITLE IN ALPHABETICAL ORDER UNDER EACH LETTER foreach($alpha as $a){ $q = mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '2' "); $n = mysql_num_rows($q); //EXCLUDES LETTER IF THERE TITLES THAT START WITH IT if($n){ echo "<div class='vector'></div>"; echo "<center>"; echo "<div class='celok'>"; echo "<div class='celok-1'><p>" .$a. "<p></div>"; echo "</div>"; echo "</center>"; while($row = mysql_fetch_array($q)){ echo "<ul><li>"; echo "<font size='4px'><a href='novinkaobsah.php?id_novinky=" .$row ['id_novinky']." '>{$row['novinka_nazov']}</a></font><br>"; echo "<span><font size='2px'> <img src='images/postauthoricon2.png' style='vertical-align:middle' alt=''> autor: </font></span>"; echo "<span><font size='2px'>" .ucfirst($row ["username"])."</font></span><br>"; echo "</li></ul>"; } echo '<br>'; } } ?> </div><!-- end blog-obsah-test --> jediny rozdel v nich je prikaz pre mysql DVD.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '1' "); DVD_serty.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '2' "); Blu-ray.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '3' "); Blu-ray_sety.php : mysql_query("SELECT * FROM novinky as n left join account as a on a.id_account = n.novinka_autor WHERE novinka_nazov LIKE '$a%' and novinka_kategorie = '4' and novinka_podkategorie = '4' "); a takto mam 4.subory na filmove a 4.subory na serialove rozdel je len v : filmove = novinka_kategorie = '4' , serialove = novinka_kategorie = '3' najlepsie by to bolo dostat do jedneho suboru alebo do dvoch ze jedne bude filmový a druhy serialový ale ked to skusam tak vždy rozlodaim kompletne cele ale nijak inak sa mi to nedari sprait, toto co som sem dal mi funguje ale je otravne ked chcem do vypisu doplnit napr.: jednu vec a musim pritom uravit 8 seborov dakujem velmi by mi to pomohlo , ak treba tu je odkaz aj na zivu stranku : http://www.ncis.projectapo.org/ Stranka sa bude zaoberat tvorbou DVD a Blu-Ray obalov |
||
Tori Profil |
V první řadě je zbytečné pokládat tentýž dotaz pro každé začáteční písmeno. Můžete číst prostě všechny a kontrolovat, jestli aktuální řádek (název filmu nebo co) začíná stejným písmenem jako minulý. Koukněte do FAQ, je to stejný princip.
Celkově se dá kód zkrátit např. takto: include './hlavicka.php'; // tady bude celé menu, až po řádek 17 // tohle si nastavíte v každém souboru na správné hodnoty $kategorie = 3; $podkategorie = 1; include './vypis.php'; // tady bude SQL dotaz, v němž použijete proměnné $kategorie a $podkategorie, až po řádek 44 include './paticka.php'; // zbytek stránky |
||
Joker Profil |
#3 · Zasláno: 4. 3. 2014, 13:50:44
james2210:
Takže rozdíl je jen v číslu kategorie. Velmi primitivní, ale funkční řešení by bylo nechat ten kód třeba jen v DVD.php, za řádek 19 ( <?php ) vložit nové řádky:
if (empty($kategorie)) $kategorie = 4; if (empty($podkategorie)) $podkategorie = 1; … and novinka_kategorie = '" . $kategorie . "' and novinka_podkategorie = '" . $podkategorie . "'"); <?php $kategorie = 4; $podkategorie = n; include "DVD.php"; ?> Šlo by vymyslet hezčí řešení, ale to bych měl tendenci to celé předělat. Ten kód celkově není nic moc, mnou uvedené řešení nemá ambici to nějak opravovat, jen řeší problém. |
||
user243 Profil |
#4 · Zasláno: 4. 3. 2014, 14:51:24
já bych u řádků 29 - 34 a 36 - 40 použil jen jedno
echo ;
|
||
peta Profil |
#5 · Zasláno: 4. 3. 2014, 15:48:41
Se stringem muzes rovnou pracovat jako s array, pokud tam nemas vic nez 1 znak nebo diakritiku. A tez si to muzes rozsekat po vice znacich http://cz2.php.net/manual/en/function.str-split.php. Vis, jakoze bys tam nemusel mit "A","B","C", ale "ABC".
user243: Ja bych na tech radcich hlavne zadny php kod nemel nez echo $promenna :) Php by se melo zpracovat jeste pred vypisem tagu html. Pak to nezdrzuje vypis. |
||
Joker Profil |
#6 · Zasláno: 4. 3. 2014, 15:56:39
peta:
Ono by dost možná žádné pole (ani řetězec) nebylo potřeba, protože to vypadá, že cílem je abecední řazení záznamů. V tom případě by prostě jen stačilo vybrat záznamy z tabulky seřazené abecedně ( ORDER BY novinka_nazov ), v nějaké proměnné mít uložené první písmeno minulého záznamu a pokud by u aktuálního bylo jiné (tj. jsem na předělu písmen), vypsat hlavičku pro dané písmeno.
Tím by odpadl ten vnější cyklus a místo 26 SQL dotazů by se dělal jeden. |
||
james2210 Profil |
#7 · Zasláno: 5. 3. 2014, 10:33:45
Problem som vyriesil tak ako ho popisuje Joker dakujem vsetkym za pomoc a mozno casom to este prepisem uplne inak ale momentalne mi to vyhovuje tak ako je to teraz.
|
||
Časová prodleva: 10 let
|
0