Bilty Posted June 16, 2014 Report Share Posted June 16, 2014 Labdien, saskāros ar nopietnu problēmu izstrādājot vienu lapu. Tātad ir nepieciešams kaut kas tāds : http://prntscr.com/3tef6b Pašlaik esmu ticis tik tālu : http://prntscr.com/3tefd2 Viss jau būtu ok, caur admincp pievienoju kategoriju - kas nonāk category table un pēc tam caur admin cp pievienoju attiecgi subkategoriju : Taču, kā jau redzams bildē #2, subkategorija var būt tikai viena, respektīvi, ja piemēram pievino vairākas subkategorijas vienai kategorijai, tad iet kkas tāds : Kategorija #1 Sub kategorija #1Kategorija #1 Sub kategorija #2Nevis : Kategorija #1 sub kategorija #1 sub kategorija #2 Tabulas : Priekš subkat - http://prntscr.com/3teg5c Priekš kategorijām : http://prntscr.com/3teg85 Un izvelku rezultātus : <div id='cssmenu'> <ul> <?php $q = mysql_query("SELECT `category`.`name`, `globcat`.`catname` FROM `category` LEFT JOIN `globcat` ON `category`.`parent_id` = `globcat`.`id`") or die(mysql_error()); while ($row = mysql_fetch_assoc($q)) { # code... ?> <li class='has-sub'><a href='#'><span><?php echo $row['catname'];?></span></a> <ul> <li><a href='#'><span><?php echo $row['name'];?></span></a></li> </ul> </li> <?php } ?> </ul> </div> Ceru uz palīdzību, paldies :)) Quote Link to comment Share on other sites More sharing options...
gurkjis Posted June 16, 2014 Report Share Posted June 16, 2014 (edited) Ar to query nedabūsi tādu struktūru. Es darītu tā, ka uztaisītu 2 atsevišķus kverijus, vienu uz `category` tabulu un otru uz `globcat`, pēc tam ar php foreach ietu cauri pirmajam masīvam, un iekšā uztaisītu otru foreach, kas balstoties uz parent_id, izvelk subitemus. Apmēram tā: <?php $globcats = array(); $q = mysql_query("SELECT * FROM `globcat`") or die(mysql_error()); while ($row = mysql_fetch_assoc($q)) { array_push($globcats, $row); } $subcats = array(); $q = mysql_query("SELECT * FROM `category`") or die(mysql_error()); while ($row = mysql_fetch_assoc($q)) { array_push($subcats, $row); } ?><div id='cssmenu'> <ul> <?php foreach ($globcats as $globcat): ?> <li class='has-sub'><a href='#'><span><?php echo $globcat['catname'];?></span></a> <ul> <?php foreach ($subcats as $subcat): ?> <?php if ($subcat['parent_id'] == $globcat['id']): ?> <li><a href='#'><span><?php echo $subcat['name'];?></span></a></li> <?php endif; ?> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </div> Edited June 16, 2014 by gurkjis Quote Link to comment Share on other sites More sharing options...
Bilty Posted June 16, 2014 Author Report Share Posted June 16, 2014 Ar to query nedabūsi tādu struktūru. Es darītu tā, ka uztaisītu 2 atsevišķus kverijus, vienu uz `category` tabulu un otru uz `globcat`, pēc tam ar php foreach ietu cauri pirmajam masīvam, un iekšā uztaisītu otru foreach, kas balstoties uz parent_id, izvelk subitemus. Apmēram tā: <?php $globcats = array(); $q = mysql_query("SELECT * FROM `globcat`") or die(mysql_error()); while ($row = mysql_fetch_assoc($q)) { array_push($globcats, $row); } $subcats = array(); $q = mysql_query("SELECT * FROM `category`") or die(mysql_error()); while ($row = mysql_fetch_assoc($q)) { array_push($subcats, $row); } ?><div id='cssmenu'> <ul> <?php foreach ($globcats as $globcat): ?> <li class='has-sub'><a href='#'><span><?php echo $globcat['catname'];?></span></a> <ul> <?php foreach ($subcats as $subcat): ?> <?php if ($subcat['parent_id'] == $globcat['id']): ?> <li><a href='#'><span><?php echo $subcat['name'];?></span></a></li> <?php endif; ?> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </div> Milzīgs tev paldies. Kaut kā būs jātlīdzīna... PALDIES Quote Link to comment Share on other sites More sharing options...
gurkjis Posted June 16, 2014 Report Share Posted June 16, 2014 Ok ja gribi atlīdzināt, tad ņem vērā un centies realizēt šādas lietas, lai pasauli padarītu labāku: 1. maksimāli, kur notiek kaut kāda datu sagatavošana, vai izvilkšana no db, to liec pirms templeita izvadīšanas 2. varbūt labāk paņem kādu frameworku, kurā būtu vienkārši lietojams ORM, nevis pliku php aiztiec un raksti primitīvus kverijus ar roku 3. kāpēc 1. līmeņa un 2. līmeņa kategorijas Tev ir atsevišķās tabulās ? Tām taču ir kopēja nozīme un loģika, var likt vienā tabulā... Tādā gadījumā pietiktu ar 1 kveriju. Quote Link to comment Share on other sites More sharing options...
Bilty Posted June 16, 2014 Author Report Share Posted June 16, 2014 Ok ja gribi atlīdzināt, tad ņem vērā un centies realizēt šādas lietas, lai pasauli padarītu labāku: 1. maksimāli, kur notiek kaut kāda datu sagatavošana, vai izvilkšana no db, to liec pirms templeita izvadīšanas 2. varbūt labāk paņem kādu frameworku, kurā būtu vienkārši lietojams ORM, nevis pliku php aiztiec un raksti primitīvus kverijus ar roku 3. kāpēc 1. līmeņa un 2. līmeņa kategorijas Tev ir atsevišķās tabulās ? Tām taču ir kopēja nozīme un loģika, var likt vienā tabulā... Tādā gadījumā pietiktu ar 1 kveriju. Nevarēju īsti izdomāt, kā... Jo man ir select kur ir visas kategorijas. Tev ir skype ?:) Quote Link to comment Share on other sites More sharing options...
gurkjis Posted June 16, 2014 Report Share Posted June 16, 2014 Ar individuālām konsultācijām nenodarbojos. Kad saliksi 1. un 2. līmeņa kat. vienā tabulā, tad arī būs 1 selektā, tikai 1. līmenim parent_id būs 0. Quote Link to comment Share on other sites More sharing options...
Bilty Posted June 16, 2014 Author Report Share Posted June 16, 2014 Ar individuālām konsultācijām nenodarbojos. Kad saliksi 1. un 2. līmeņa kat. vienā tabulā, tad arī būs 1 selektā, tikai 1. līmenim parent_id būs 0. Kuru frameworku tu ieteiktu sākt lietot kā pirmo? Quote Link to comment Share on other sites More sharing options...
gurkjis Posted June 16, 2014 Report Share Posted June 16, 2014 āh, ORMam pat nevajag veselu frameworku, man pašam patika lietot http://redbeanphp.com/ - super ērts. Modernos PHP frameworkus neesmu lietojis, bet esmu lasījis, ka labi ir http://laravel.com/ un http://fuelphp.com/ Manā skatījumā, iesācējam labs frameworks ir tāds, kurš ir viegli apgūstams un lietojams. Taču šajā jautājumā varbūt citi foruma biedri varētu ko ieteikt. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 16, 2014 Report Share Posted June 16, 2014 (edited) $mainCategories = Db::prepare('SELECT `id`, `name` FROM `categories` WHERE `parent_id` = 0')->fetchAll(); // array() $subCategoryStmt = Db::prepare('SELECT `name` FROM `categories` WHERE `parent_id` = ?'); foreach ($mainCategories as $category) { $category['subcategories'] = $subCategoryStmt->fetchAll(array($category['id'])); // array() } ?> <div id="cssmenu"> <ul> <?php foreach ($mainCategories as $mainCategory) { ?> <li<?php if (!empty($mainCategory['subcategories'])) { echo ' class="has-sub"'; } ?>> <a href="#"> <span><?php echo htmlspecialchars($mainCategory['name']); ?></span><!-- te reāli var mierīgi iztikt bez spana --> </a> <?php if (!empty($mainCategory['subcategories'])) { ?> <ul> <?php foreach ($mainCategory['subcategories'] as $subcategory) { ?> <li> <a href="#"> <span><?php echo htmlspecialchars($subcategory['name']); ?></span><!-- te reāli var mierīgi iztikt bez spana --> </a> </li> <?php } ?> </ul> <?php } ?> </li> <?php } ?> </ul> </div> Edited June 16, 2014 by jurchiks Quote Link to comment Share on other sites More sharing options...
Bilty Posted June 16, 2014 Author Report Share Posted June 16, 2014 $mainCategories = Db::prepare('SELECT `id`, `name` FROM `categories` WHERE `parent_id` = 0')->fetchAll(); // array() $subCategoryStmt = Db::prepare('SELECT `name` FROM `categories` WHERE `parent_id` = ?'); foreach ($mainCategories as $category) { $category['subcategories'] = $subCategoryStmt->fetchAll(array($category['id'])); // array() } ?> <div id="cssmenu"> <ul> <?php foreach ($mainCategories as $mainCategory) { ?> <li<?php if (!empty($mainCategory['subcategories'])) { echo ' class="has-sub"'; } ?>> <a href="#"> <span><?php echo htmlspecialchars($mainCategory['name']); ?></span><!-- te reāli var mierīgi iztikt bez spana --> </a> <?php if (!empty($mainCategory['subcategories'])) { ?> <ul> <?php foreach ($mainCategory['subcategories'] as $subcategory) { ?> <li> <a href="#"> <span><?php echo htmlspecialchars($subcategory['name']); ?></span><!-- te reāli var mierīgi iztikt bez spana --> </a> </li> <?php } ?> </ul> <?php } ?> </li> <?php } ?> </ul> </div> Paldies :) Interesanti apskatīties visus variantus! Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 16, 2014 Report Share Posted June 16, 2014 Abiem kverijiem vēl derētu piemest ORDER BY. Quote Link to comment Share on other sites More sharing options...
Bilty Posted June 17, 2014 Author Report Share Posted June 17, 2014 (edited) Kā varētu vislabāk vēl iedalīt vispār šādai navigācijai? Piemēram, uzspiežot - Kategorija - subkategorija uz kādas no subkategorijam, lai taa atveraas kaut kada lapa un tur rādas visas preces zem šīs subkategorijas. <?php $globcats = array(); $q = mysql_query("SELECT * FROM `globcat`") or die(mysql_error()); while ($row = mysql_fetch_assoc($q)) { array_push($globcats, $row); } $subcats = array(); $q = mysql_query("SELECT * FROM `category`") or die(mysql_error()); while ($row = mysql_fetch_assoc($q)) { array_push($subcats, $row); } ?><div id='cssmenu'> <ul> <?php foreach ($globcats as $globcat): ?> <li class='has-sub'><a href='#'><span><?php echo $globcat['catname'];?></span></a> <ul> <?php foreach ($subcats as $subcat): ?> <?php if ($subcat['parent_id'] == $globcat['id']): ?> <li><a href='#'><span><?php echo $subcat['name'];?></span></a></li> <?php endif; ?> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> </div> tieši šim Edited June 17, 2014 by Bilty Quote Link to comment Share on other sites More sharing options...
Bilty Posted June 17, 2014 Author Report Share Posted June 17, 2014 (edited) It kā izdomāju risinājumu, tātad izveidojot papildfailu, teiksim cat.php mērķis tāds : uzspiežot uz kādas no navigācijas iespējam, teiksim Kokmateriāli (kategorija) - ozols (subkat) , tad, lai lietotājs tiktu pārmests uz Mans links pagaidām : localhost/parkets/cat&Apgaismojums&Sveces cat - faila nosaukums Apgaismojums - padotā kategorija no navigācijas Sveces - Apgaismojuma subkategorija Kā, lai tagad pieprasīto rezultātu apstrādā? ķipa select * from ... where category_name = 'Apgaismojums' AND sub_cat = Sveces Edited June 17, 2014 by Bilty Quote Link to comment Share on other sites More sharing options...
gurkjis Posted June 17, 2014 Report Share Posted June 17, 2014 kategorijas gan urlī, gan kverijā norādi ar id... pēc nosaukuma nevajag identificēt. Katrai precei jābūt category_id, pēc tās arī tad taisi selectu un iegūsi preces,kas ir šajā kategorijā. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 17, 2014 Report Share Posted June 17, 2014 Kāpēc ID? Visnesmukākie urļi sanāks. Vajag izmantot URI slugs, tad arī googles reitings uzlabosies. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.