Kom ihåg mig?
Home Menu

Menu


Komplicerad hierarki med Codeigniter

Ämnesverktyg Visningsalternativ
Oläst 2010-01-27, 20:46 #1
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Standard Komplicerad hierarki med Codeigniter

Hej
Mitt scenario är att jag försöker bygga ett system där man kan skapa ett oändligt antal med underkategorier och jag kan inte riktigt lura ut hur jag ska göra detta i Codeigniter, där det blir extra svårt på grund av mcv-uppdelningen.

Min databastabell kan jag designa om ifall det är den bästa lösningen, men just nu har den fälten "id, parent, name" där parent alltså är id:t av en annan kategori eller tomt om kategorin inte är en underkategori.

För att skriva ut det här skulle man ju vanligtvis kunnat skriva någon typ av rekursiv funktion som använder sig av flera mysql-satser och direkt skriver ut dem sedan... men med MVC, hur gör man då?

Jag behöver alltså en modellfunktion som hämtar all data som behöver hämtas, detta ska vi controllern skickas till viewn i form av en array.

Det är viktigt att systemet kan hantera ett oändligt antal kategorier och underkategorier.
Althalos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-28, 00:05 #2
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
KarlRoos KarlRoos är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jul 2007
Inlägg: 1 416
Jag förstår inte riktigt problemet. Vad har det här med MVC att göra?

I CI kan du skriva helt egna MySQL queries, sedan är det bara att köra $result = $this->db->query(' sql .. ');

Och köra på precis som vanligt
KarlRoos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-28, 20:57 #3
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Nej, för jag kan ju inte echoa direkt så jag måste spara det på något sätt, t.ex. i en array så att jag kan skriva ut den arrayen senare, i viewn. Jag har letat upp ett exempel på vad jag menar, visa mig hur jag kan skriva följande för codeigniter:
Kod:
function display_children($parent, $level) {
   // retrieve all children of $parent
   $result = mysql_query('SELECT title FROM tree '.
                          'WHERE parent="'.$parent.'";');

   // display each child
   while ($row = mysql_fetch_array($result)) {
       // indent and display the title of this child
       echo str_repeat('  ',$level).$row['title']."\n";

       // call this function again to display this
       // child's children
       display_children($row['title'], $level+1);
   }
}
http://articles.sitepoint.com/articl...-data-database

Den koden skriver ut informationen... men det gör den genom att köra en ny query för varje nivå. Visst, jag kan köra flera queries, men det måste ske i modellen. Och därifrån kan jag inte echoa. Jag är kanske inte jättebra på att förklara.. men är det någon som förstår mitt problem?

Här är en liten början:
Kod:
<?php
class Articles_model extends Model
{
	$categories[] = '';

	function articles_model() 
	{
		parent::Model();
	}
	
	function get_categories($parent)
	{
		$result = $this->db->where('parent', $parent)
			->order_by('parent', 'asc')
			->get('articles_categories')
			->result_array();
		
		foreach($result as $category)
		{
			
		}
	}
}
?>
$categories[] är alltså till för att man ska kunna göra funktionen rekursiv och samtidigt spara informationen någonstans.. men hur vet jag ej.

Senast redigerad av Althalos den 2010-01-28 klockan 21:06 Anledning: Förklara varför vad categories[] är till för :-)
Althalos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-28, 23:12 #4
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Jag kan inte CI men att köra flera queries låter inte som en bra idé.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-29, 12:15 #5
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Hur ska jag göra då? Annan struktur på databasen?
Althalos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-29, 18:32 #6
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
dotvoid dotvoid är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 199
Hierarkisk data bör hanteras som med nested set-metoden enligt vad som beskrivs bra här: http://dev.mysql.com/tech-resources/...ical-data.html

Jag skrev också ett blogginlägg för länge sedan om hur man jobbar med sortering i php/javascript http://www.dotvoid.com/page/3/.

Att jobba "traditionellt" med hierakisk data i sql är inte så lysande prestandamässigt om du t ex ofta ska visa ett helt träd.
dotvoid är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-01-30, 12:47 #7
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Tack, det var precis vad jag behövde. Kunde nu också söka mer specifikt och hittade då ett speciellt library för CI som använde det din länk beskriver.
Althalos är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:53.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017