Views & Drupal Commerce-producten
Hoe bouw je een view met Drupal Commerce-producten? Lijkt een simpele vraag, maar het antwoord kan tegenvallen. In het bijzonder:
- Toegang tot alle velden? Hoe krijg ik toegang tot alle velden? Dus zowel de product display (pd)-velden als de producttype (pt)-velden?
- Toegang tot reference entity-velden? In het bijzonder: Hoe krijg ik toegang tot reference entity-velden die vanaf een Drupal Commerce-producttype verwijzen naar een andere entiteit?
- Casus zomer 2016: In de zomer 2016 worstelde ik met een Drupal Commmerce-pt dat een verwijzing bevatte naar een entiteit van het type tool. Het betreffende veld heette
pt_tool_reference
Je kunt een view rechtstreeks baseren op het achterliggende producttype. Da's handig bij testen, maar in de praktijk wellicht van beperkte waarde, omdat sommige functionaliteiten alleen beschikbaar zijn voor de nodes oftewel displays, bovenop de producttypes (bv. SEF-URL's)
Bronentiteit (source entity)
Bij het aanmaken van een nieuwe view moet je bepalen wat de bron van de view wordt. Ik noem dat veld bronentiteit of source entity
De bronentiteit vind je terug in de header van de code die je via Export genereert. Het illustreert dat dit een allesbepalende keuze betreft:
$view = new view(); $view->name = 'test2'; $view->description = ''; $view->tag = 'default'; $view->base_table = 'node'; ← Bronentiteit $view->human_name = 'test2'; $view->core = 7; $view->api_version = '3.0'; $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$view = new view(); $view->name = 'test3'; $view->description = ''; $view->tag = 'default'; $view->base_table = 'commerce_product'; ← Bronentiteit $view->human_name = 'test3'; $view->core = 7; $view->api_version = '3.0'; $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
Sub-bronentiteit (sub source entity)
Vervolgens moet je de sub-bronentiteit (sub source entity) bepalen. Da's minder schokkend, want die kun je naderhand aanpassen.
De keuze vind je terug in de code onder Master » Content: Type. Bv.:
/* Filter criterion: Content: Type */ $handler->display->display_options['filters']['type']['id'] = 'type'; $handler->display->display_options['filters']['type']['table'] = 'node'; $handler->display->display_options['filters']['type']['field'] = 'type'; $handler->display->display_options['filters']['type']['value'] = array('product_display' => 'product_display', ← Sub-bronentiteit
Dezelfde view, maar nu met aangepaste instellingen onder Filter criteria:
/* Filter criterion: Content: Type */ $handler->display->display_options['filters']['type']['id'] = 'type'; $handler->display->display_options['filters']['type']['table'] = 'node'; $handler->display->display_options['filters']['type']['field'] = 'type'; $handler->display->display_options['filters']['type']['value'] = array( 'all' => 'all', 'article' => 'article', 'page' => 'page', 'product_display' => 'product_display', 'tool' => 'tool', );
Diverse combinaties van instellingen
De opties bij elkaar:
Aanmaak view: Weergave | Aanmaak view: Weergavetype | Format: Show | Format: Opties | Evaluatie |
---|---|---|---|---|
Content | Product-display | Teaser | ? | Geen directe toegang tot velden. Ik weet niet waar 'Teaser' naar verwijst |
Content |
Basisinstellingen & code
Views kun je exporteren en importen als php-code. Hoe corresponderen bovengenoemde basisinstellingen en de bijbehorende vode?