Once you click on the item’s link, you’re working outside of Ditto on a normal document, so you don’t have access to Ditto-generated placeholders etc. If you can be more precise about what you want to do by way of pagination (e.g. remember what page of the list you came from for a return link, or maybe split a long article?) I expect someone will have an answer.
As for tags, here’s what I have in a full-post template. Note that I use the delimited list widget on my tag TV, using a comma as delimiter:
<?php
//PostTags: create links from post's tags to tag-roundup page
// Updated 3 Sep 09
//
// parameters:
// &tagShow: ID of tag summary page (MANDATORY)
// - must be a page with a Ditto call with tagging extender
// &tags: TV containing list of tags
// &delimiter: tag separator; default to comma
// &postDate: unixtime date; default to createdon
// &dateFormat: strftime date format for output; default to %c
if (!isset($tagShow)) return "tagShow parameter must be set";
$delimiter = (isset($delimiter)) ? $delimiter : ',';
$dateFormat = (isset($dateFormat)) ? $dateFormat : '%c';
$output = '<div id="postDate"><h5>';
$postDate = (isset($postDate)) ? $postDate : $modx->documentObject['createdon'];
$output .= strftime($dateFormat,$postDate);
if (!empty($tags)) {
$tagList = explode($delimiter, $tags);
$tagLinks = ' <span id="tagLinks">';
foreach ($tagList as $tag) {
$tagLinks .= '<a href="[~' . $tagShow . '~]?tags=' . trim($tag).'">' . $tag . '</a>, ';
}
// remove trailing comma and space
$tagLinks = substr($tagLinks,0,-2) . '</span>';
}
$output .= $tagLinks . '</h5></div>' . "\n";
return $output;
?> If you don’t have a special page to display sets of items filtered by tag, your &tagShow parameter will be the main Ditto listing page.
Hope this gives you some ideas, at least.

KP