Download & Extend

Add basic view tokens

Project:Views
Version:7.x-3.x-dev
Component:Code
Category:feature request
Priority:normal
Assigned:Dave Reid
Status:closed (fixed)
Issue tags:Metatags, token

Issue Summary

As a part of adding metatag integration with Views, it has become useful to have some basic views tokens that can be used like [view:name], [view:title], [view:url], etc.

Comments

#1

Status:active» needs review

Phase one of my plan to convert Views to use Token API is now written. :) (just kidding)

AttachmentSizeStatusTest resultOperations
1278550-views-tokens.patch2.8 KBIgnored: Check issue status.NoneNone

#2

Status:needs review» needs work

+++ b/views.tokens.incundefined
@@ -0,0 +1,94 @@
+          if ($path = $view->get_path()) {

I'm wondering whether $view->get_url() should be used as get_url() uses arguments and some other stuff.

#3

Well the idea behind this is you're passing in a view that's being currently executed (I'm using token replacement in during view preview and also execute). Should just be a known issue that if you're not passing in a view with arguments and things that those tokens may not work properly.

#4

$view = new view;
$view->name = 'frontpage';
$view->description = 'Emulates the default Drupal front page; you may set the default home page path to this view to make it your front page.';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'Front page';
$view->core = 0;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['access']['type'] = 'none';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['query']['options']['query_comment'] = FALSE;
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
$handler->display->display_options['row_options']['hide_empty'] = 0;
$handler->display->display_options['row_options']['default_field_elements'] = 1;
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['title']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['title']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['title']['alter']['external'] = 0;
$handler->display->display_options['fields']['title']['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields']['title']['alter']['trim_whitespace'] = 0;
$handler->display->display_options['fields']['title']['alter']['nl2br'] = 0;
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['title']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['title']['alter']['trim'] = 0;
$handler->display->display_options['fields']['title']['alter']['html'] = 0;
$handler->display->display_options['fields']['title']['element_label_colon'] = 1;
$handler->display->display_options['fields']['title']['element_default_classes'] = 1;
$handler->display->display_options['fields']['title']['hide_empty'] = 0;
$handler->display->display_options['fields']['title']['empty_zero'] = 0;
$handler->display->display_options['fields']['title']['hide_alter_empty'] = 0;
$handler->display->display_options['fields']['title']['link_to_node'] = 1;
/* Sort criterion: Content: Sticky */
$handler->display->display_options['sorts']['sticky']['id'] = 'sticky';
$handler->display->display_options['sorts']['sticky']['table'] = 'node';
$handler->display->display_options['sorts']['sticky']['field'] = 'sticky';
$handler->display->display_options['sorts']['sticky']['order'] = 'DESC';
/* Sort criterion: Content: Post date */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Contextual filter: Content: Nid */
$handler->display->display_options['arguments']['nid']['id'] = 'nid';
$handler->display->display_options['arguments']['nid']['table'] = 'node';
$handler->display->display_options['arguments']['nid']['field'] = 'nid';
$handler->display->display_options['arguments']['nid']['default_argument_type'] = 'fixed';
$handler->display->display_options['arguments']['nid']['default_argument_skip_url'] = 0;
$handler->display->display_options['arguments']['nid']['summary']['number_of_records'] = '0';
$handler->display->display_options['arguments']['nid']['summary']['format'] = 'default_summary';
$handler->display->display_options['arguments']['nid']['summary_options']['items_per_page'] = '25';
$handler->display->display_options['arguments']['nid']['break_phrase'] = 0;
$handler->display->display_options['arguments']['nid']['not'] = 0;
/* Filter criterion: Content: Promoted to front page */
$handler->display->display_options['filters']['promote']['id'] = 'promote';
$handler->display->display_options['filters']['promote']['table'] = 'node';
$handler->display->display_options['filters']['promote']['field'] = 'promote';
$handler->display->display_options['filters']['promote']['value'] = '1';
$handler->display->display_options['filters']['promote']['group'] = 0;
$handler->display->display_options['filters']['promote']['expose']['operator'] = FALSE;
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = '1';
$handler->display->display_options['filters']['status']['group'] = 0;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;

/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['path'] = 'frontpage';

/* Display: Feed */
$handler = $view->new_display('feed', 'Feed', 'feed');
$handler->display->display_options['defaults']['title'] = FALSE;
$handler->display->display_options['title'] = 'Front page feed';
$handler->display->display_options['pager']['type'] = 'some';
$handler->display->display_options['style_plugin'] = 'rss';
$handler->display->display_options['row_plugin'] = 'node_rss';
$handler->display->display_options['path'] = 'rss.xml';
$handler->display->display_options['displays'] = array(
  'default' => 'default',
  'page' => 'page',
);
$handler->display->display_options['sitename_title'] = '1';

/* Display: Feed */
$handler = $view->new_display('feed', 'Feed', 'feed_1');
$handler->display->display_options['defaults']['title'] = FALSE;
$handler->display->display_options['title'] = 'Front page feed';
$handler->display->display_options['pager']['type'] = 'some';
$handler->display->display_options['style_plugin'] = 'rss';
$handler->display->display_options['row_plugin'] = 'node_rss';
$handler->display->display_options['path'] = 'rss.xml';
$handler->display->display_options['displays'] = array(
  'default' => 'default',
  'page' => 'page',
);
$handler->display->display_options['sitename_title'] = '1';

/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page_1');
$handler->display->display_options['path'] = 'frontpage';

$view->preview('default', array(123));
dsm($view->get_path());
dsm($view->get_url());

If you directly executed the code given above you will see the difference between get_path and get_url() and i think the user actually want get_url() because this one has the arguments. Perhaps i don't get your last comment, it's 1:30 am.

#5

Hrm, I used $view->get_url() as that's what includes/admin.inc uses as the 'Path' information in previewing a view.

#6

BLARGH I wrote the patch using get_path() and not get_url(). davereid--

#7

Status:needs work» needs review
AttachmentSizeStatusTest resultOperations
1278550-views-tokens.patch2.8 KBIgnored: Check issue status.NoneNone

#8

Status:needs review» needs work

+++ b/views.tokens.incundefined
@@ -0,0 +1,94 @@
+          if ($path = $view->get_path()) {

Still using get_path, i'm confused. Perhaps it would help if you could explain why you use get_path() :)
Views uses get_path in the admin listing ui, because there are no arguments availible.

#9

Because I'm stupid and can't roll a patch correctly. :)

#10

Status:needs work» needs review

Let's try this again.

AttachmentSizeStatusTest resultOperations
1278550-views-tokens.patch2.8 KBIgnored: Check issue status.NoneNone

#11

Status:needs review» reviewed & tested by the community

I just wanted to commit it but i stumbled upon the filename.
In views it should be probably in the includes dir, is this possible with the hook system in drupal7?

#12

Short answer, no. :)

#13

In your patch you say that this only works when Token module is installed. Then this should check
module_exists('token');

+    // [view:url:*] nested tokens. This only works if Token module is installed.
+    if ($url_tokens = token_find_with_prefix($tokens, 'url')) {
+      if ($path = $view->get_url()) {
+        $replacements += token_generate('url', $url_tokens, array('path' => $path), $options);
+      }
+    }

So to change the code, it would become:

<?php
   
if (module_exists('token') && $url_tokens = token_find_with_prefix($tokens, 'url')) {
      if (
$path = $view->get_url()) {
       
$replacements += token_generate('url', $url_tokens, array('path' => $path), $options);
      }
    }
?>

#14

No we don't because it gracefully fails if Token is not enabled. Using module_exists() is unnecessary.

#15

Ok :). Sorry for mistaking. I didnt test it.

#16

Status:reviewed & tested by the community» fixed

So as there is no way around it, committed to 7.x-3.x

#17

Status:fixed» closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.