Creating Links

Links are how visitors get from one page to another. You'll probably put a lot of links in menus – a menu being just a list of links to other content. But you may also place links directly inside content text, or inside a block's text.

You may want links that point to a specific content item on your site, or a specific page on an outside web site. Or you may want powerful links that pick up and return a list of multiple content items from your site's database.

There's a lot you can do. Here's a basic guide to linking:

Placing Links

Know the path

A link is a pointer to another page or node address. The first thing you need to know is the target page's address: its path (or if it's external, such as a page on another website, its URL). If you haven't done so, see Content Paths and URLs.

You're now armed with the paths you need for the links you'll create. Next:

Linking to a path or external URL

Putting a link into a menu item

Every menu item needs to specify a path; sending the visitor to that path is the purpose of a menu item. When creating or editing a menu item, you input the path into the 'Path' field. See Working with Menus: Administration Form.

For an internal path, you only need to input the path, not the entire URL starting with http://<www.yourdomain.com>. For example, if the link is to a product description page with the path products/home/superbroom, then products/home/superbroom is all you need to input.

For an external URL, input the whole URL, starting with http:// .

For an email address, write mailto:, followed by the address: mailto:info@google.com, for example. Clicking on that menu item's link will prompt the user's email program to draft a message. 

Putting a link into content text

If you want to place a link to an external URL or an email address into a block of text, you likely don't need to do anything special. If the text field uses a text editor like TinyMCE or FCKeditor, the text editor may be set up to automatically convert certain addresses into working links. Just type the URL or email address normally – like www.google.com or <www.yourdomain.com>/news/special-report – and the text editor should do its magic when you save the content. You probably don't even need the http:// part of those URLs (but test to make sure). Your site may perform the same nifty trick for email addresses too, turning email@google.com into a working email link.

Again, though, that'll only work in a field using such a text editor which has been set up to create those automatic links; yours might not be (in which case you'd need to configure Input Formats to improve things – a topic for later).

More importantly, you probably don't want to use a full URL for every link. You probably want to bury the link within other words (like "read my hosting revue" or "Visit the National Geographic site"). How to do that?

The easiest way is to use the 'insert/edit link' function in your text editor (see Using Text and Image Editors). You select the words you want to imbue with a link, click the appropriate 'insert/edit link' button, type the URL into the window that pops up, and close the window. Voilá, a link embedded in the text.  

However, a caution (for typical, if not necessarily all, Drupal setups): Unlike the above procedure for placing a link into a menu item, here you do need to consider the full URL, even for internal pages. If you only put in the part of the path that follows http://<www.yourdomain.com>/, Drupal will likely try to append that path to the current page path, which may not at all be what you want.

That'll make a lot more sense with a simple example.

My page called 'Drupal for Beginners' has the internal path drupal-for-beginners and the URL http://www.drupalace.com/drupal-for-beginners. Say I want to embed a link to it within the last four words of the following text: "Read my overview of Drupal for beginning users."

First, I'll call up my 'insert/edit link' function and input just the internal path:

Link using internal path only

Here's the link that results:

"Read my overview of Drupal for beginning users."

It's no good. My text editor took the path for this page (EDAM/creating-links) and tacked drupal-for-beginners onto the end of that, creating the monstrosity www.drupalace.com/EDAM/creating-links/drupal-for-beginners as the final URL. That'd be fine if it were what I wanted, but in this case, it's not. There's no page with that URL and thus the link is broken.

(Edit, many months later: Hmm, at first my text editor was creating the wrong URL shown above. I just checked again, and now it's instead creating www.drupalace.com/EDAM/drupal-for-beginners . I don't know what change I made to the site's configuration to spur that change... but either way, it's an invalid link! So read on.) 

This time, I'll insert the whole URL:

Link using whole URL

Here's the link that results:

"Read my overview of Drupal for beginning users."

That one works!

Keep that point in mind as you create links. You don't want broken links littering your site.

Link to a Term's path

Recall that a "Term" is a "keyword" that tags your content. You can link to a Term, which will return all nodes tagged with that Term. For example, you can make a menu item named 'See All Products' which links to the Term 'product', and when clicked returns all nodes tagged with the Term 'product'. An instant, simple product catalog!

What you want here is the Term's path. A Term has a path like any other content; once you now it, you can do use it like any other path. See Content Paths and URLs to find a Term's path.

Link to multiple Terms

Now comes the powerful stuff: combining multiple Terms in one link. You can create a link that returns all nodes that are tagged with the Terms 'product' and 'technology', for a narrow list of only nodes that deal with both of those topics. Or you can create a link that returns all nodes that are tagged with the Terms 'product' or 'technology', for a broader list of all nodes about either of those topics.

First, note the path for each Term you'll use. For the following examples, say you'll use three Terms whose paths are taxonomy/term/1, taxonomy/term/5, and taxonomy/term/13:

AND combinations: Write the path like this:

 taxonomy/term/1,5,13 

to return nodes tagged with all three of the Terms.

OR combinations: Write the path like this:

 taxonomy/term/1+5+13 

to return nodes tagged with any one of the Terms.

Use the same format, separating numbers with commas or plusses, whether you're combining two Terms or twenty. (Naturally, you'll replace the above "1", "5", and "13" with the appropriate numbers you've confirmed for your Terms.)

If you think the above sounds hard to remember, you aren't alone. It's definitely strange that OR combinations, not AND combinations, use the symbol "+" in their syntax. It sounds backward. Chalk it up to an odd quirk of Drupal, and move ahead.

Link to a Term and all its child Terms

Terms can be "hierarchical", with "child" Terms placed below a "parent" Term. (See Terms, Vocabularies, and Categories: "Tagging" Your Content.) One example: a Term 'machinery', with child Terms below it like 'pump', 'generator', etc.

If you'd like to create a link that picks up content tagged with the parent or any of its child – 'machinery' or 'pump' or 'generator' in the above example – there are three ways.

The first and simplest method in concept: Make sure that you tag all pump-related nodes with 'pump' and 'machinery'. That way, a link to the Term 'machinery' will pick up all pump-related nodes as well. But here's the catch with that method: If you forget to include the tag 'machinery' on your Model 501 Grease Pump product description node, the link will miss it.

The second method is as described above: Link to the combined terms, like taxonomy/term/1+5+13. This link will catch the Model 501 Grease Pump node, on which you included the 'pump' tag but forgot the 'machinery' tag. That's better, but there's another problem: As you add new child Terms, you need to keep updating the link to include the new Terms (so that it ends up looking like taxonomy/term/1+5+13+24+25+31+33 and on and on.)

The third way is as follows: Link to the 'machinery' Term only, and tack on /all at the end of it. It might look like this:

taxonomy/term/1/all

That link will pick up content tagged with Term 1 ('machinery' in this example), plus any child Terms below that, even any new ones you add later. Handy!

Comments

Scott's picture

Hi,

I just overcame the beginner's problem of trying to post storys and other items to pages. I was not using taxonomy and paths to do this. Your careful explanations made this possible for me to do this the right way. Thank you so much! 

It's very easy and intuitive once you've gotten your mind around it, thanks again for the breakthrough.

Scott

drupalace's picture

Please accept my late thanks for the kind words. I agree that much of what's "hard" in Drupal is actually easy, as long as clear explanations are at hand!

Unknown Drupaloid's picture

WOW your attendant came up primary in Google. And this is what I was hunt for.

ohnode's picture

I have displayed a list of products on a page, and now want, when a client clicks on a product image, title, or description he will be taken to an individual product page. I want to use just one product page "template or shell" and have different products display in it. TY so much for helping this nerd node.

Beach Cruisers's picture

 Loads of excellent writing here. It was indeed very helpful and insightful while being straight forward and to the point. Thanks for the posting.

Add new comment