Bruk modulene CCK og views og bygg relasjoner mellom data

I mange situasjoner ønsker man å utnytte relasjoner mellom innhold på hjemmesiden. I denne videoguiden skal vi opprette egne innholdstyper og lage relasjoner mellom dem. Videre skal vi bruke relasjonene mellom innhold til å lage visninger i views.

Guiden forutsetter at du har modulene CCK og views installert. Hvis du trenger hjelp til å lære CCK, se videotutorialen om CCK først. Hvis du ikke vet hva viewsmodulen er og hvordan du bruker den, kan du lære det mest grunnleggende om modulen i videoguiden hvordan man kan kontrollere innhold på websiden.

Resultatet er en hjemmeside hvor man kan hente ut noder med relasjoner til hverandre, basert på URLer. For å illustrere hvordan tar vi utgangspunkt i en jobbdatabase hvor man har:

  1. Noder for ledige jobber (stillingsutlysninger)
  2. Noder for jobbsøknader

Her vil selskaper kunne utlyse stillinger, og brukerne opprette noder for å legge inn en jobbsøknad, jobbsøknaden vil være i relasjon til stillingsutlysningen, slik at man ved hjelp av IDen til stillingsutlysningen kan se hvilke jobbsøknader som har kommet inn.

Hvis du synes eksemplet er kjedelig, så minnes du på at dette kun er et eksempel. Med denne kraftkomboen kan du lage bildegallerier, spillanmeldelsesdatabase og så videre og så videre. Sagt det før og sier det igjen: Det er kun fantasien din som setter grenser for hvilken funksjonalitet du får på hjemmesiden med moduler.

Hvordan bruke relationships i views og CCK

Du har ikke installert Flash på datamaskinen din. Du trenger minimum flash 8 for å kunne se denne videoen.

I denne videotutorialen bruker vi modulene CCK og views. Følg linkene for å laste dem ned.

Importer innholdstyper og views

Hvis du kun ønsker å se videoen og ikke implementere tingene selv, kan du i steden importere både innholdstypene og views. Du kan da få litt hands on experience og leke med visningene for å endre dem. Merk dog at du kun får rammeverket og ikke innholdet. Lag noen eksempelnoder (utlysninger og søknader) og eksperimenter med flere felter og views om du vil.

Importer innholdstyper

For å importere innholdstyper må gjøre følgende

  1. Aktivere modulen i Content Copy under CCK
    domene.com/admin/build/modules
  2. Lime inn definisjonen på innholdstypen fra koden nedenfor
    domene.com/admin/content/types/import

Stillingsutlysning

$content['type']  = array (
  'name' => 'Stillingsutlysning',
  'type' => 'stillingsutlysning',
  'description' => '',
  'title_label' => 'Stilling',
  'body_label' => 'Stillingsbeskrivelse',
  'min_word_count' => '0',
  'help' => '',
  'node_options' =>
  array (
    'status' => true,
    'promote' => true,
    'sticky' => false,
    'revision' => false,
  ),
  'language_content_type' => '0',
  'old_type' => 'stillingsutlysning',
  'orig_type' => '',
  'module' => 'node',
  'custom' => '1',
  'modified' => '1',
  'locked' => '0',
  'comment' => '0',
  'comment_default_mode' => '4',
  'comment_default_order' => '1',
  'comment_default_per_page' => '50',
  'comment_controls' => '3',
  'comment_anonymous' => 0,
  'comment_subject_field' => '1',
  'comment_preview' => '1',
  'comment_form_location' => '0',
);

Jobbsøknad

$content['type']  = array (
  'name' => 'Jobbsøknad',
  'type' => 'jobbsoknad',
  'description' => '',
  'title_label' => 'Overskrift',
  'body_label' => 'Søknaden',
  'min_word_count' => '0',
  'help' => '',
  'node_options' =>
  array (
    'status' => true,
    'promote' => false,
    'sticky' => false,
    'revision' => false,
  ),
  'language_content_type' => '0',
  'old_type' => 'jobbsoknad',
  'orig_type' => '',
  'module' => 'node',
  'custom' => '1',
  'modified' => '1',
  'locked' => '0',
  'comment' => '0',
  'comment_default_mode' => '4',
  'comment_default_order' => '1',
  'comment_default_per_page' => '50',
  'comment_controls' => '3',
  'comment_anonymous' => 0,
  'comment_subject_field' => '1',
  'comment_preview' => '1',
  'comment_form_location' => '0',
);
$content['fields']  = array (
  0 =>
  array (
    'label' => 'Stilling',
    'field_name' => 'field_stilling',
    'type' => 'nodereference',
    'widget_type' => 'nodereference_buttons',
    'change' => 'Change basic information',
    'weight' => '37',
    'autocomplete_match' => 'contains',
    'size' => 60,
    'description' => 'Velge stilling det søkes på.',
    'default_value' =>
    array (
      0 =>
      array (
        'nid' => '',
      ),
    ),
    'default_value_php' => '',
    'default_value_widget' => NULL,
    'required' => 1,
    'multiple' => '0',
    'referenceable_types' =>
    array (
      'stillingsutlysning' => 'stillingsutlysning',
      'story' => 0,
      'jobbsoknad' => 0,
      'page' => 0,
    ),
    'advanced_view' => '--',
    'advanced_view_args' => '',
    'op' => 'Save field settings',
    'module' => 'nodereference',
    'widget_module' => 'nodereference',
    'columns' =>
    array (
      'nid' =>
      array (
        'type' => 'int',
        'unsigned' => true,
        'not null' => false,
        'index' => true,
      ),
    ),
    'display_settings' =>
    array (
      'label' =>
      array (
        'format' => 'above',
        'exclude' => 0,
      ),
      'teaser' =>
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      'full' =>
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
      4 =>
      array (
        'format' => 'default',
        'exclude' => 0,
      ),
    ),
  ),
);
$content['extra']  = array (
  'title' => '38',
  'body_field' => '40',
  'revision_information' => '41',
  'comment_settings' => '42',
  'menu' => '39',
);

Importer view

For å importere en visning, gå til domene.com/admin/build/views/import, legg inn eget navn på visningen, lim inn kodene nedenfor, og vips du har visningen vi bruker i videoen og kan eksperimentere.

$view = new view;
$view->name = 'list_jobbsoknad';
$view->description = '';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('relationships', array(
  'field_stilling_nid' => array(
    'label' => 'Stilling',
    'required' => 1,
    'delta' => -1,
    'id' => 'field_stilling_nid',
    'table' => 'node_data_field_stilling',
    'field' => 'field_stilling_nid',
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
  ),
));
$handler->override_option('fields', array(
  'title' => array(
    'label' => 'Tittel',
    'alter' => array(
      'alter_text' => 0,
      'text' => '',
      'make_link' => 0,
      'path' => '',
      'link_class' => '',
      'alt' => '',
      'prefix' => '',
      'suffix' => '',
      'target' => '',
      'help' => '',
      'trim' => 0,
      'max_length' => '',
      'word_boundary' => 1,
      'ellipsis' => 1,
      'strip_tags' => 0,
      'html' => 0,
    ),
    'empty' => '',
    'hide_empty' => 0,
    'empty_zero' => 0,
    'link_to_node' => 1,
    'exclude' => 0,
    'id' => 'title',
    'table' => 'node',
    'field' => 'title',
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'none',
  ),
));
$handler->override_option('arguments', array(
  'nid' => array(
    'default_action' => 'not found',
    'style_plugin' => 'default_summary',
    'style_options' => array(),
    'wildcard' => 'all',
    'wildcard_substitution' => 'Alle',
    'title' => '',
    'breadcrumb' => '',
    'default_argument_type' => 'fixed',
    'default_argument' => '',
    'validate_type' => 'numeric',
    'validate_fail' => 'not found',
    'break_phrase' => 0,
    'not' => 0,
    'id' => 'nid',
    'table' => 'node',
    'field' => 'nid',
    'validate_user_argument_type' => 'uid',
    'validate_user_roles' => array(
      '2' => 0,
      '4' => 0,
    ),
    'override' => array(
      'button' => 'Override',
    ),
    'relationship' => 'field_stilling_nid',
    'default_options_div_prefix' => '',
    'default_argument_user' => 0,
    'default_argument_fixed' => '',
    'default_argument_php' => '',
    'validate_argument_node_type' => array(
      'jobbsoknad' => 0,
      'page' => 0,
      'stillingsutlysning' => 0,
      'story' => 0,
    ),
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_vocabulary' => array(
      '1' => 0,
    ),
    'validate_argument_type' => 'tid',
    'validate_argument_transform' => 0,
    'validate_user_restrict_roles' => 0,
    'validate_argument_php' => '',
  ),
));
$handler->override_option('access', array(
  'type' => 'none',
));
$handler->override_option('cache', array(
  'type' => 'none',
));
$handler->override_option('style_plugin', 'table');
$handler->override_option('style_options', NULL);
$handler = $view->new_display('page', 'Nettside', 'page_1');
$handler->override_option('path', 'jobbsoknader/%');
$handler->override_option('menu', array(
  'type' => 'none',
  'title' => '',
  'description' => '',
  'weight' => 0,
  'name' => 'navigation',
));
$handler->override_option('tab_options', array(
  'type' => 'none',
  'title' => '',
  'description' => '',
  'weight' => 0,
));