Modul för att välja och jämföra noder

Events happening in the community are now at Drupal community events on www.drupal.org.
nadam's picture

Har redan skrivit i forumet, men tänkte ta det här på svenska också eftersom det gäller en (blivande) svensk sajt.

Jag har börjat hacka ihop en sajt i Drupal 6, som ska bli något i stil med pricerunner och prisjakt, men jag hittar inga färdiga moduler för själva jämförelsen i Drupal.

Tanken är att man ska kunna visa en lista med tjänster där de viktigaste egenskaperna har varsin kolumn. Till vänster ska det vara checkboxar så man kan välja ut de rader som verkar mest intressanta. Sen klickar man på en knapp "Jämför" för att visa en detaljerad vy över det man har valt och då kommer en ny lista där de valda produkterna har varsin kolumn och alla egenskaper får varsin rad.

För att visa listan använder man förstås Views-modulen. För checkboxarna behöver jag något i stil med Views Bulk Operation, men istället för att göra någon "operation" på de utvalda noderna, så ska de skickas som argument till nästa vy där de ska visas. Detta tänkte jag alltså skriva en egen modul för.

Är det "rätt" sätt att göra det på eller finns det andra moduler man kan använda istället?

Tackar,
Adam

Comments

Fortfarande inget svar...

nadam's picture

...vare sig här eller på drupalforumet.

Views Bulk Operation var inte helt trivial att sätta sig in i (som nybörjare), så om någon har någon alternativ lösning så vore jag väldigt tacksam. Det borde finnas något enkelt sätt att göra följande i Drupal:

  1. Visa en enkel lista med noder
  2. Ge användaren möjlighet att välja en delmängd av dessa
  3. Visa urvalet i en ny mer detaljerad lista

Tackar,
Adam

Flags?

itangalo's picture

Jag har aldrig använt Flag-modulen, men den kanske kan hjälpa dig att göra det du vill. Med den kan varje användare för sig markera noder, och så kan du låta en annan View lista endast de noder som är flaggade. (Jag föreställer mig att man i Views kan visa ett fält som är någon form av checkbox eller liknande -- man vill ju inte behöva öppna varje nod för att flagga den.)

Det som blir problem är väl att nollställa flaggorna efter varje visning, så att man inte måste kryssa bort produkterna i efterhand.

Kanske kan vara ett steg på vägen i alla fall...
//Johan Falk, Solna

Tack

nadam's picture

Har varit inne på det spåret, men jag tror inte det håller i längden att ändra state fram och tillbaka. Det vore bättre om de valda nodernas id kan skickas som argument till den andra vyn på något sätt. Då kan man också spara urvalet med hjälp av URL:en. Views Bulk Operation är det närmaste jag har hittat, så jag lägger några timmar till på det och ser om jag kan komma över tröskeln.

Några steg framåt

nadam's picture

Tröskeln var klart högre än jag trodde. Tänkte meddela vad jag har gjort so far...

Analysen av VBO (Views Bulk Operations) var riktigt svår för en nybörjare som mig, så jag gick istället över på att lära mig Form API. Inte helt lätt det häller, men följande steg hjälpte:

  1. En bra screen cast
  2. En 10-step tutorial

Jag satte även upp eclipse som utvecklingsmiljö/IDE och Bitnami Drupal Stack som lokal testserver.

När jag gick tillbaka till analysen av VBO hittade jag att den inkluderar 'misc/tableselect.js' vilket ledde mig vidare till modulen Elements som har ett form-element som heter just tableselect. Den verkar också bli en del av Drupal 7 core.

Så nu är jag i valet och kvalet om jag ska:

  1. fortsätta på VBO-spåret eller
  2. använda Elements tableselect eller
  3. en kombination av båda

Tableselect är betydligt enklare att förstå, men VBO känns som bättre långsiktigt då den är integrerad med Views.

Jag tar gärna emot tips och synpunkter på detta.

/Adam

Mitt råd är att du

solipsist's picture

Mitt råd är att du använder VBO. På NodeOne brukar vi säga "Koda mindre, leverera mer". Med det menar vi att man bör välja existerande lösningar snarare än återuppfinna egna. Det enda du behöver skriva i ett fall är en action som gör själva jämförelsen, VBO kan sköta alla gränssnittsbitar åt dig, du behöver alltså inte bekymra dig om Form API.


Jakob Persson - NodeOne

Tackar

nadam's picture

Var själv inne på det spåret från början, men såg inte hur en action skulle kunna leda till att man kommer till en ny godtycklig vy. Om det går så är det ju helt underbart. Kanske till och med finns någon modul för detta redan. Jag fortsätter på det spåret.

En vy kan ta argument och du

solipsist's picture

En vy kan ta argument och du kan skicka fler än ett argument. Du skulle alltså kunna skapa en vy som visar info om flera produkter och tar ett antal nid som argument. En action är en godtycklig callback vilket innebär att du har fullständig frihet att göra vad du vill.


Jakob Persson - NodeOne

Nu är det nära

nadam's picture

Det var inte action man skulle använda utan dess släkting Node operation.

/**
* Implementation of hook_node_operations().
*/
function views_argument_selector_node_operations() {
  $operations = array(
    'redirect' => array(
      'label' => t('Compare'),
      'callback' => 'views_argument_selector_redirect',
    ),
  );
  return $operations;
}

function views_argument_selector_redirect($nodes) {
  drupal_goto('vps/2+3');
}

Nu är bara frågan hur jag ska få bort hårdkodningen av "2+3" så att det istället hämtas från arrayen $nodes som innehåller nid på de noder man har valt. Måste ju vara plättlätt, men som nybörjare på PHP tar jag gärna emot tips på detta.

Mission completed!

nadam's picture

Blev klar med detta nyligen och har skickat koden till kratib som har hand om VBO. Det blev en action till slut nu när VBO har stöd för action-attributet aggregate.

Kratib gillade idén och la in koden som en del av VBO.

Har också skrivit en instruktion om någon skulle vilja prova.

/Adam

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week