Tags Zufallsseite

Hilfe zu Modulen und Tags
Post Reply
Sepp
Forum Members
Forum Members
Posts: 38
Joined: Thu Jan 28, 2010 2:43 pm

Tags Zufallsseite

Post by Sepp »

Hallo. Ich bin neu in CMS made simple und es gefällt mir ganz gut.

Ich habe ne frage, ich möchte, wenn man im Menu auf die Hauptgruppe klickt, dass man auf auf eine Unterseite der Hauptgruppe gebracht wird, diese sollte jedesmal ne andere sein.

Bsp: Wenn ich auf "Arbeiten" klicke, komme ich dann per zufall auf 1, 2, oder 3
  • Arbeiten
     
    • 1
       
    • 2
       
    • 3

    Gibts dafür ein Tag oder ist das utopisch?

    grüsse

    Sepp.
NaN

Re: Tags Zufallsseite

Post by NaN »

Hallo und Willkommen im Forum :)

Also utopisch ist das nicht. Es ist nur nicht ganz so einfach.
Meine ersten Überlegungen dazu:

Die Seite "Arbeiten" müsste vom Typ her ein seiteninterner Link sein, der auf die erste untergeordnete Seite verweist.
Im Menutemplate müsste man dann für jeden Link prüfen, ob es sich um einen Verweis auf eine Seite handelt und welches Alias dieser Link hat (in Deinem Falle "arbeiten").
Ist dem so, wird nicht die URL des Links genommen, sondern die URL die ein UDT (Userdefined Tag = Benutzerdefinierte PHP Funktionen die man vom Backend aus verwalten kann) zurückliefert.

Dieser UDT bekommt als Parameter die ID des Links und liest so die untergeordneten Seiten dieses Links aus.
Mit einer PHP Zufallsfunktion wird eine dieser Seiten ausgewählt, die entsprechende URL gebastelt und dann zurückgeben.

Bis auf ein bissel PHP und Smarty Basics dürfte es da keine Probleme geben.

Der Benutzerdefinierte Tag könnte so aussehen:

Code: Select all


global $gCms;

$db = $gCms->GetDB();
$config = $gCms->GetConfig();

$url = $config['root_url'];

if(isset($params['parent_id']))
	$parent_id = trim($params['parent_id']);
else
	return $url;

$children = array();
$query = "SELECT content_alias, hierarchy_path FROM ".cms_db_prefix()."content WHERE parent_id=?";
$dbresult = $db->Execute($query, array($parent_id));
while($dbresult && $row = $dbresult->FetchRow()) {
	$children[] = $row;
}

if(count($children))
	$child = $children[array_rand($children,1)];
else
	return $url;

if ($config["url_rewriting"] == 'mod_rewrite') {
	if ($config['use_hierarchy'] == true) {
		$url = $config['root_url']. '/' . $child['hierarchy_path'] . (isset($config['page_extension'])?$config['page_extension']:'.html');
	}
	else {
		$url = $config['root_url']. '/' . $child['content_alias'] . (isset($config['page_extension'])?$config['page_extension']:'.html');
	}
}
else {
	if (isset($_SERVER['PHP_SELF']) && $config['url_rewriting'] == 'internal') {
		if ($config['use_hierarchy'] == true) {
			$url = $config['root_url'] . '/index.php/' . $child['hierarchy_path'] . (isset($config['page_extension'])?$config['page_extension']:'.html');
		}
		else {
			$url = $config['root_url'] . '/index.php/' . $child['content_alias'] . (isset($config['page_extension'])?$config['page_extension']:'.html');
		}
	}
	else {
		$url = $config['root_url'] . '/index.php?' . $config['query_var'] . '=' . $child['content_alias'];
	}
}
return $url;

(Einfach im Backend unter Erweiterungen->Benutzerdefinierte Tags als "get_random_child" speichern.)


Und das MenüTemplate z.B. so:

{if $count > 0}

{foreach from=$nodelist item=node}
{if $node->depth > $node->prevdepth}
{repeat string="" times=$node->depth-$node->prevdepth}
{elseif $node->depth prevdepth}
{repeat string="" times=$node->prevdepth-$node->depth}

{elseif $node->index > 0}
{/if}

{if $node->current == true}
Current page is {$node->hierarchy}: url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if} >{$node->menutext}

{elseif $node->parent == true}
url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}>{$node->hierarchy}: {$node->menutext}

{elseif $node->type == 'sectionheader'}
{$node->menutext}

{elseif $node->type == 'separator'}


{elseif $node->type == 'pagelink' && $node->alias=='Arbeiten'}
id}">{$node->menutext}


{else}
url}"{if $node->accesskey != ''} accesskey="{$node->accesskey}"{/if}{if $node->tabindex != ''} tabindex="{$node->tabindex}"{/if}{if $node->titleattribute != ''} title="{$node->titleattribute}"{/if}{if $node->target != ''} target="{$node->target}"{/if}>{$node->hierarchy}: {$node->menutext}

{/if}

{/foreach}
{repeat string="" times=$node->depth-1}

{/if}
cyberman

Re: Tags Zufallsseite

Post by cyberman »

Dafür gab's auch mal einen Tag - ist allerdings schon etwas älter (keine Ahnung, ob er noch funktioniert)

http://dev.cmsmadesimple.org/projects/randompage
NaN

Re: Tags Zufallsseite

Post by NaN »

Ich täte gut daran, öfter mal im Forge vorbeizuschauen, anstatt das Rad jedesmal neu erfinden zu wollen :D
Sepp
Forum Members
Forum Members
Posts: 38
Joined: Thu Jan 28, 2010 2:43 pm

Re: Tags Zufallsseite

Post by Sepp »

Danke leute

Ich werde die Beispiele ausprobieren.
Post Reply

Return to “Module und Tags”