Posted by fpersson on October 18, 2008 at 6:37pm
Jag vill pressentera data i en tabell, eftersom tabellen kommer att bli ganska lång (ca 200-300 poster) så vill jag splittra upp den på flera sidor, dessutom vill jag skapa en länk som ger besökaren möjlighet att se noden där all data finns. Hur löser jag detta lättast?
Min nuvarande kod
<?php
$header = array('Namn', 'Märke', 'Sort');
$rows = array();
$list_no = variable_get('paging', 3); //4
$sql = 'SELECT {node}.title, {beer}.brand, {beer}.sort FROM {node}, {beer} WHERE {node}.vid = {beer}.nid ORDER BY {beer}.sort';
$res = db_query($sql);
while ($row = db_fetch_array($res)) {
$rows[] = $row;
}
print theme('table', $header, $rows);
?>
Comments
Varför inte använda Views
Varför inte använda Views med två displays av typen page? Då kan du även ha en sida som visar samma view men utan pagination genom att visa en annan display som visar fler noder per sida. Du kan ha flera page displays per view i Views 2, varje display kan ha olika inställningar såsom antalet noder per sida.
Jakob Persson
imBridge - www.imbridge.com
Jakob Persson – Leancept – Results-only digital and marketing consultants – Personal blog
Jag kollade lite på Views,
Jag kollade lite på Views, men blev aldrig riktigt klok på hur man ska använda det, finns det någon bra How-To någonstans?
//Fredrik
Screencasts för Views
Jag rotade runt lite och hittade tre ställen som verkar kunna ge en överblick av hur Views fungerar:
http://drupal.org/node/202851
http://www.topnotchthemes.com/blog/080727/drupal-6-screencasts-views-2-c...
http://www.masteringdrupal.com/screencast/new-features-in-views2
(Den första gäller Views för Drupal 5, de andra för Drupal 6.)
Det är en liten tröskel för att förstå hur Views fungerar, men det är väl värt mödan. En vacker dag tar jag och postar en screencast på svenska här på forumet.
//Johan Falk, Solna
Du behöver pager
Som det ser ut här så har du gjort en egen modul, och då måste du intrigera den med views, vilket visserligen kan vara vettigt, då det ger dig otrolig flexibilitet.
Om du vill göra flera sidor så ska du använda dig av pager_query för att göra din sqlfråga. Därefter är det enkelt att få flera sidor, det är bara att använda en inbyggd theme-funtion (pager).
I sin enklaste form borde detta se ut som något i den här stilen. Här har jag inte angett några variabler för hur många som ska visas per sida, så då använder den standardvärdet 10, men det är ju lätt att ändra:
<?php$header = array('Namn', 'Märke', 'Sort');
$rows = array();
$list_no = variable_get('paging', 3); //4
$sql = 'SELECT {node}.title, {beer}.brand, {beer}.sort FROM {node}, {beer} WHERE {node}.vid = {beer}.nid ORDER BY {beer}.sort';
$res = pager_query($sql);
while ($row = db_fetch_array($res)) {
$rows[] = $row;
}
print theme('table', $header, $rows).theme('pager');
?>
//Fabian Sörqvist
Jag tror han avsåg placera
Jag tror han avsåg placera koden ovan i en nod och använda PHP-filtret på den. Det finns ingen anledning att göra en egen modul när det enda han gör är en implicit JOIN mellan två tabeller. Sättet ovan fungerar men då tappar man en stor del av poängen med Drupal som har fördelen att du kan bygga webbplatser och funktionalitet på existerande moduler. Att replikera vad Drupal klarar självt är att krångla till det något oerhört, och det finns inga skäl, inte ens prestandamässiga, som motiverar att göra så. Trots vad man gärna tror får du faktiskt mindre flexibilitet på det sättet då du försöker lösa en sak i Drupal på ett icke-drupaligt sätt.
Istället för att skapa en separat tabell med alla ölsorter, skapa CCK-fält i en nodtyp. Jag antar att du vill skapa en e-handelslösning. Genom att använda CCK kan du använda även Übercart och e-commerce-paketet som de är. Om du istället skapar en egen tabell, som du gjort ovan, måste du själv lösa integrationen mellan dessa.
Drupals komponenter ingår i ett ramverk och är utvecklade för att fungera tillsammans. Så länge du följer konventionerna har du en massa bonus från det, men om du väljer att göra en egen lösning kommer du märka att saker som annars skulle vara enkla bli mycket svårare då du måste implementera om dem själv.
Du kan göra exakt vad du beskrev med Views genom att lista noder i en tabell:
http://views-help.doc.logrus.com/
Jakob Persson
imBridge - www.imbridge.com
Jakob Persson – Leancept – Results-only digital and marketing consultants – Personal blog
Inte e-handel utan en sida
Inte e-handel utan en sida med "oberoende" tester av öl, egentligen skrev jag mest modulen av nyfikenhet. Jag får testa CKK (också av nyfikenhet). Jag börjar nu inse att valet att skapa en egen modul inte var det mest rätta ur Drupal-prespektiv. En förhands titt finns på testservern , jag har bestämmt mig för att försöka ha den riktiga siten uppen 15/11 så jag har tid på mig att ändra allt om det skulle vara så.
//fredrik
CCK är nästan alltid det rätta valet
I ditt fall rekommenderar jag verkligen CCK. CCK kan tillsammans med views ge en flexibilitet som du annars hade behövt skriva massor av kod för att få, och som bonus är det lätt att ändra på saker och ting om du skulle inse att du vill det. Endast i undantagsfall behöver man skriva en egen modul, t.ex. om skapandet av noden ska ske genom ett väldigt speciellt workflow.
Rolig sididé! Hade du tänkt försöka få igång det i någon större skala eller är det bara på skoj? Jag driver själv Ölpris som fokuserar på information om restauranger och vilka drycker de serverar. Siten är i beta och komm upp för en vecka sedan så det finns en hel del buggar (och ej översatta textsträngar =). Vi står för närvarande i begrepp att starta en ideell förening som kommer att recensera restauranger i Göteborgsområdet. Lycka till i varje fall!
//Fabian Sörqvist
Jag började på en ny
Jag började på en ny version med CKK, men blev inte nöjd med hur data pressenteras, men det är väl bara att fixa en tema template för det?
Vi hade en statisk sida under 1990-talet där vi hade testat och referat ca 150 sorter och allt finns kvar vilket är tur, dessutom så har vi ca 50 ölsorter som är testade och finns på papper och vi håller på att göra nya tester. Vi kommer att ha våra tester och omdömmen i centrum, men kommer låta besökare kommentera vår tester och själv sätta betyg på ölen.
PS: Kollade på din sida Ölpris, du bör kanske ta med vilken datum priset var aktuellt.
//Fredrik
Tema för cck
Antingen gör man bara en node template i stil med 'node-dinnodtyp.tpl.php' och så fixar man temat i den filen eller också kan man använda sig av content template, som är en modul som förenklar arbetet att göra teman för nodtyper. Personligen brukar jag göra det själv utan content template, har aldrig haft behov av den.
Börja med att skriva print_r($node) i din template-fil, så får du en överblick över datan som du kan använda dig av. Därefter är det bara att börja snickra ;)
Angående ölpris: Du har rätt i att det kanske borde vara med. Tack för tipset!
//Fabian Sörqvist
verkar vara mycket malt när
verkar vara mycket malt när det gäller att skapa tabeller. själv driver jag en whiskysida och ska omvandla den här:
http://www.whiskyinfo.se/uisgebeatha/distilleries/
till drupal har kollat på både views och CCK men som übernybörjare verkar dessa vara väldigt krångliga att förstå sig på.
någon som har lite snabba tips på hur man ska komma igång för att skapa en sådan tabell.
just i detta fallet vill jag inte ha den uppdelad på olika sidor utan gillar den långa sidan dock med möjligheten att filtrera.