Page 1 of 1

Tags Zufallsseite

Posted: Thu Jan 28, 2010 2:49 pm
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.

Re: Tags Zufallsseite

Posted: Thu Jan 28, 2010 5:23 pm
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}

Re: Tags Zufallsseite

Posted: Fri Jan 29, 2010 7:29 am
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

Re: Tags Zufallsseite

Posted: Fri Jan 29, 2010 2:44 pm
by NaN
Ich täte gut daran, öfter mal im Forge vorbeizuschauen, anstatt das Rad jedesmal neu erfinden zu wollen :D

Re: Tags Zufallsseite

Posted: Wed Feb 10, 2010 12:42 pm
by Sepp
Danke leute

Ich werde die Beispiele ausprobieren.