Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 08. November 2012 10:50
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
[GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Guten Morgen,
ich bin auf der Suche nach einer Lösung für folgendes "Problem".
Es wäre toll, wenn ihr mir auf die Sprünge helfen könntet.
Am Kopf der Internetseite gibt es eine Navigation mit den
Hauptthemen. Um von dort zu den Inhalten zu kommen,
habe ich die Seiten, die quasi die Hauptthemen sind, als
interne Linkseiten angelegt und die weiteren zum Thema
gehörenden Seiten dann als untergeordnete Seiten dort
jeweils hinterlegt.
Funktioniert auch, nur gebe ich beim internen Link immer
eine konkrete Zielseite an.
Wie löse ich es, damit bei einem Klick in der Hauptnavigation
nicht die konkrete Seite sondern immer die erste Seite in
der Untergruppe gezeigt wird.
Wenn ich die konkrete Seite lösche läuft der interne Link
in eine Fehlermeldung - praktischer wäre, wenn immer
die erste untergeordente Seite angezeigt wird.
Ich habe ein ganz aktuelle CMSms-Installation mit ganz
aktuellen Modulen (nur zur Info)
Ich bin dankbar für Input :-)
VG
Stefan
Offline
#2 08. November 2012 11:18
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Das ist nicht ganz ohne. Folgender Lösungsansatz kann ich dir dazu bieten:
- Nimm als Seitentyp "Section Header"
- Modifiziere das Menütemplate wie folgt:
{elseif $node->type == 'sectionheader'}
{if $node->haschildren}
{udt_get_children_url currentpage=$node->alias}
<li><a href="{$childurl}" title="{$node->menutext}">{$node->menutext}</a>
{else}
<li class="sectionheader {if $node->depth == 1}f{$node->hierarchy}{/if}">{$node->menutext}{/if}
Der UDT muss ich noch bauen. Dazu kannst du z.B. im Modul ToolBox eine Vorlage finden. Ich melde mich, wenn ich den UDT entsprechend ergänzt habe.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#3 09. November 2012 08:56
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Super, danke Dir! Bin sehr gespannt :-)
Beitrag geändert von stefanauskoeln (09. November 2012 08:57)
Offline
#4 09. November 2012 09:24
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
So. Hier nun meine 2Cents dazu:
- Installiere dir das Modul "ToolBox"
- Ersetze den Inhalt der Datei ./modules/ToolBox/lib/class.tbTools.php mit folgendem Inhalt:
<?php
/*======================================================================================
Module: ToolBox
Title: Extended tools class
Version: 1.1
Descript.: Smarty-Extension for some useful functions
Last Mod.: 09.11.2012
Author: Lukas Blatter
Email: lukas.blatter@blattertech.ch
Notes:
Licence: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
However, as a special exception to the GPL, this software is distributed
as an addon module to CMS Made Simple. You may not use this software
in any Non GPL version of CMS Made simple, or in any version of CMS
Made Simple that does not indicate clearly and obviously in its admin
section that the site was built with CMS Made Simple.
Find more information about CMS Made Simple on its website:
http://www.cmsmadesimple.org/
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Or read it online: http://www.gnu.org/licenses/licenses.html#GPL
======================================================================================*/
class tbTools
{
/**
*
* Prüft, ob der angegebene Alias eine PageID ist und gibt den Alias zurück
* @param $alias
* @return string $alias
* @author: Lukas Blatter, 20.12.2011
*/
private final function getAlias($alias)
{
$gCms = cmsms();
$manager = $gCms->GetHierarchyManager();
$node = $manager->sureGetNodeByAlias($alias);
if (!isset($node)) {
$node = $manager->sureGetNodeById($alias);
if (isset($node))
$alias = $node->get_tag($alias);
else
return false;
}
return $alias;
}
/**
* based on $cgsimple->self_url by Robert Campbell
* Gibt die aktuelle Seiten-URL zurück
* @param string $assign
* @return string / smarty assign
*/
public final function selfUrl($assign='')
{
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$p = strpos($_SERVER['SERVER_PROTOCOL'],'/');
$protocol = strtolower(substr($_SERVER['SERVER_PROTOCOL'],0,$p)).$s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
$s = $protocol."://".$_SERVER['SERVER_NAME'].$port;
$url = $s.$_SERVER['REQUEST_URI'];
if(!empty($assign)) {
$gCms = cmsms();
$smarty = $gCms->GetSmarty();
$smarty->assign($assign,$url);
return;
}
return $url;
}
/**
* based on $cgsimple->get_parent_alias by Robert Campbell
* Gibt den Alias der Parent Page oder den Alias der Parent Page einer definierten Seite zurück
* @param string $alias
* @param string $assign
*/
public final function getParentAlias($alias = '',$assign = '')
{
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
$content = $contentops->LoadContentFromAlias($alias);
if( !is_object($content) ) return '';
$parentid = $content->ParentId();
if( $parentid <= 0 ) return '';
$alias = $contentops->GetPageAliasFromId($parentid);
if(!empty($assign)) {
$smarty->assign($assign,$alias);
return;
}
return $alias;
}
/**
* based on $cgsimple->get_root_alias() by Robert Campbell
* gibt den Page Alias der Rootseite (oberste Ebene) aktuellen oder einer definierten Seite zurück
* @param unknown_type $alias
* @param unknown_type $assign
*/
public final function getRootAlias($alias = '',$assign = '')
{
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
$id = $contentops->GetPageIDFromAlias($alias);
while( $id > 0 ) {
$content = $contentops->LoadContentFromId($id);
if( !is_object( $content ) ) return '';
$alias = $content->Alias();
$id = $content->ParentId();
}
if(!empty($assign)) {
$smarty->assign($assign,$alias);
return;
}
return $alias;
}
/**
* gibt den Page Alias einer Parentseite auf einem bestimmten Level aus.
* @copyright Lukas Blatter
* @param string $alias
* @param string $assign
* @return string - page alias
*/
public final function getLevelAlias($level, $alias = '',$assign = '')
{
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
$id = $contentops->GetPageIDFromAlias($alias);
while( $id > 0 ) {
$content = $contentops->LoadContentFromId($id);
if( !is_object( $content ) ) return '';
$pagelevel = substr_count($content->Hierarchy(),'.') + 1;
$alias = $content->Alias();
$id = $content->ParentId();
if ($pagelevel == $level) {
break;
}
else if ($pagelevel < $level) {
return '';
}
}
if(!empty($assign)) {
$smarty->assign($assign,$alias);
return;
}
return $alias;
}
/**
* based on $cgsimple->get_page_title() by Robert Campbell
* Gibt den Seitentitel einer definierten Seite oder der aktuellen Seite zurück
* @param unknown_type $alias
* @param unknown_type $assign
*/
public final function getPageTitle($alias = '',$assign = '')
{
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
if(!$alias) return '';
$content = $contentops->LoadContentFromAlias($alias);
if( !is_object($content) ) return '';
if(!empty($assign)) {
$smarty->assign($assign,$content->Name());
return;
}
return $content->Name();
}
/**
* based on $cgsimple->get_page_menutext() by Robert Campbell
* Gibt den Menutext einer bestimmten Seite oder der aktuellen Seite zurück
* @param string $alias
* @param string $assign
*/
public final function getPageMenutext($alias = '',$assign = '')
{
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
if(!$alias) return false;
$content = $contentops->LoadContentFromAlias($alias);
if( !is_object($content) ) return '';
if(!empty($assign)) {
$smarty->assign($assign,$content->MenuText());
return;
}
return $content->MenuText();
}
/**
* based on $cgsimple->has_children() by Robert Campbell
* Hat eine definierte oder die aktuelle Seite weitere Unterseiten?
* @param $alias
* @param $assign
*/
public final function hasChildren($alias = '',$assign = '')
{
$result = false;
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
if(!$alias) return false;
$content = $contentops->LoadContentFromAlias($alias);
if(is_object($content) )
$result = $content->HasChildren();
if(!empty($assign)) {
$smarty->assign($assign,$result);
return;
}
return $result;
}
/**
* Gibt den Alias der ersten Childseite aus
* @param string $parentalias
* @param string $assign
* @copyright Lukas Blatter
*/
public final function getFirstChildAlias($parentalias = '', $assign = '')
{
$smarty = cmsms()->GetSmarty();
$children = $this->getChildren($parentalias);
if (!$children) return false;
$alias = $children[0]['alias'];
if(!empty($assign)) {
$smarty->assign($assign,$alias);
return;
}
return $alias;
}
/**
* Gibt die URL einer definierten Seite aus
* @param string $alias
* @param string $assign
* @copyright Lukas Blatter
*/
public final function getPageUrl($alias = '', $assign = '')
{
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
if(!$alias) return false;
$content = $contentops->LoadContentFromAlias($alias);
if( !is_object($content) ) return '';
if(!empty($assign)) {
$smarty->assign($assign,$content->GetURL());
return;
}
return $content->GetURL();
}
/**
* based on $cgsimple->get_children() by Robert Campbell
* Gibt einer Array mit den PageIds aller Child Seiten einer bestimmten Seite oder der aktuellen Seite zurück.
* @param string $alias
* @param boolean $showall
* @param string $assign
*/
public final function getChildren($alias = '',$showall = false, $assign = '')
{
$gCms = cmsms();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
if(!$alias) return false;
$hm = cmsms()->GetHierarchyManager();
$parent = $hm->getNodeByAlias($alias);
if( !$parent ) { return false; }
$child_nodes = $parent->getChildren(false,$showall);
if( !is_array($child_nodes) || count($child_nodes) == 0 ) return false;
$results = array();
foreach( $child_nodes as $node ) {
$content = $node->getContent();
if( !is_object($content) ) continue;
$row = array('alias'=>$content->Alias(),'id'=>$content->Id(),
'title'=>$content->Name(),'menutext'=>$content->MenuText(),
'show_in_menu'=>$content->ShowInMenu(),'type'=>$content->Type());
$results[] = $row;
}
if( !count($results) ) return false;
if(!empty($assign)) {
$smarty->assign($assign,$results);
return;
}
return $results;
}
/**
* based on $cgsimple->get_page_content() by calguy1000
* Gibt den Inhalt eines bestimmten Content Blocks einer definierten Seite zurück
* @param string $alias - alias or id of a page
* @param string $block - name of the contentblock
* @param string $assign - name of assign variable
*/
public final function getPageContent($alias, $block = '',$assign = '')
{
$result = false;
$gCms = cmsms();
$alias = $this->getAlias($alias);
if(!$alias) return false;
$contentops = $gCms->GetContentOperations();
$smarty = $gCms->GetSmarty();
if( $block == '' ) $block = 'content_en';
if( $alias != '' ) {
$content = $contentops->LoadContentFromAlias($alias);
if( is_object($content) ) {
$result = $content->GetPropertyValue($block);
}
}
if(!empty($assign)) {
$smarty->assign(trim($assign),$result);
return;
}
return $result;
}
/**
* Hat Berechtigung in den definierten FEU UserGroups
* @param string $feugroups
* @param string $assign
* @return boolean true/false
* @author: Lukas Blatter, 20.12.2011
*/
public final function hasFeuGroupAccess($feugroups = '', $assign = '')
{
$gCms = cmsms();
$smarty = $gCms->GetSmarty();
if (!$feugroups) {
if (!empty($assign)) {
$smarty->assign(trim($assign),false);
return;
}
return false;
}
$feusers = cms_utils::get_module('FrontEndUsers');
if (!$feugroups or !is_Object($feusers)) {
if (!empty($assign)) {
$smarty->assign(trim($assign),false);
return;
}
return false;
}
$user_id = $feusers->LoggedInId();
$groups = $feusers->GetMemberGroupsArray($user_id);
$gns = array();
if($groups !== false ) {
foreach( $groups as $gid ) {
$gns[] = $gid['groupid'];
}
}
$feuArray= explode(',',$feugroups);
$retval = false;
foreach ($feuArray as $feu) {
if (in_array($feu,$gns)) {
if (!empty($assign)) {
$smarty->assign(trim($assign),true);
return;
}
return true;
}
}
if (!empty($assign)) {
$smarty->assign(trim($assign),false);
return;
}
return false;
}//if
/**
* Ist der Benutzer eingeloggt
* @param string $assign
* @return int user_id
* @author: Lukas Blatter, 20.12.2011
*/
public final function isLoggedIn($assign = '')
{
$gCms = cmsms();
$smarty = $gCms->GetSmarty();
$feusers = cms_utils::get_module('FrontEndUsers');
if (!is_object($feusers)) {
if (!empty($assign)) {
$smarty->assign(trim($assign),false);
return;
}
return false;
}//if
$user_id = $feusers->LoggedInId();
if ($user_id) {
if (!empty($assign)) {
$smarty->assign(trim($assign),true);
return;
}
return true;
}//if
if (!empty($assign)) {
$smarty->assign(trim($assign),false);
return;
}//if
return false;
}//function
/**
* based on $cgsimple->get_silbing() by Robert Campbell
* Get prev sibling
* @param $dir
* @param $assign
* @param $alias
*/
public final function getSibling($dir,$assign = '',$alias = '')
{
$gCms = cmsms();
$db = $gCms->GetDb();
$smarty = $gCms->GetSmarty();
$contentops = $gCms->GetContentOperations();
if( empty($alias) ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
$content = $contentops->LoadContentFromAlias($alias);
if( !is_object($content) ) return false;
// get the last item out of the hierarchy
// and rebuild
$query = 'SELECT content_alias FROM '.cms_db_prefix().'content
WHERE parent_id = ?
AND item_order %s ?
AND active = 1
ORDER BY item_order %s
LIMIT 1';
switch(strtolower($dir)) {
case '-1':
case 'prev':
$thechar = '<';
$order = 'DESC';
break;
default:
$thechar = '>';
$order = 'ASC';
break;
}//switch
$res = $db->GetOne(sprintf($query,$thechar,$order),
array($content->ParentId(),$content->ItemOrder()));
if( !empty($assign) ) {
$smarty->assign(trim($assign),$res);
return;
}//if
return $res;
}//function
/**
*
* Wandelt ein Objekt in ein Array um
* @param $obj
* @return array
* @author Lukas Blatter
*/
protected final function object2array($obj)
{
$_arr = is_object($obj) ? get_object_vars($obj) : $obj;
foreach ($_arr as $key => $val) {
$val = (is_array($val) || is_object($val)) ? $this->object2array($val) : $val;
$arr[$key] = $val;
}
return $arr;
}
/**
* Creates HTML table from multidimensional array
* based on http://www.terrawebdesign.com/multidimensional.php
*
* @param array $array
* @return string
*/
public final function getArrayAsTable($array)
{
$array = $this->object2array($array);
$table = "<table>\n";
$table .= $this->getArrayAsTableMakeRows($array, 1, 0);
$table .= "</table>\n";
return $table;
}//function
protected final function getArrayAsTableMakeRows($array, $level, $sub)
{
$string = "";
if (is_array($array) == 1){ // check if input is an array
foreach($array as $key_val => $value) {
$offset = "";
if (is_array($value) == 1){ // array is multidimensional
$string .= "<tr>";
$offset = $this->getArrayAsTableDoOffset($level);
$string .= $offset . "<td valign='top'>" . $key_val . "</td>";
$string .= $this->getArrayAsTableMakeRows($value, $level+1, 1);
}else{ //(sub)array is not multidim
if ($sub != 1){ // first entry for subarray
$string .= "<tr>";
$offset = $this->getArrayAsTableDoOffset($level);
}
$sub = 0;
$string .= $offset . "<td class='th' valign='top'>" . $key_val .
"</td><td valign='top'>" . $value . "</td>";
$string .= "</tr>\n";
}
} //foreach $array
}//if
return $string;
}//function
protected final function getArrayAsTableDoOffset($level)
{
$offset = ""; // offset for subarry
for ($i=1; $i<$level;$i++){
$offset = $offset . "<td></td>";
}
return $offset;
}//function
/**
* based on $cgsimple->get_file_listing() by Robert Campbell
* Gibt den Inhalt eines bestimmten Ordners in einem Array zurück
* @param string $dir
* @param string $excludeprefix
* @param string $assign
*/
public final function getFileListing($dir,$excludeprefix='',$assign = '')
{
$gCms = cmsms();
$smarty = $gCms->GetSmarty();
$config = $gCms->GetConfig();
$fileprefix = '';
if( !empty($excludeprefix) ) {
$fileprefix = $excludeprefix;
}
if( startswith($dir,'/') ) return;
$dir = cms_join_path($config['uploads_path'],$dir);
$list = get_matching_files($dir,'',true,true,$fileprefix,1);
if( !empty($assign) ) {
$smarty->assign(trim($assign),$list);
return;
}
return $list;
}//function
};// class
// EOF
Danach ergänze das Menütemplate wie folgt:
{elseif $node->type == 'sectionheader'}
{if $node->haschildren}
<li><a href="{$tbtools->getPageUrl($tbtools->getFirstChildAlias($node->alias))}" title="{$node->menutext}">{$node->menutext}</a>
{else}
<li class="sectionheader {if $node->depth == 1}f{$node->hierarchy}{/if}">{$node->menutext}{/if}
(Diese Ergänzung wird in das nächste Update der ToolBox einfliessen. Du kannst den Inhalt der Datei also bedenkenlos ersetzen)
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#5 09. November 2012 09:27
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Wow - ich probiere das gleich mal aus :-)
Bis hierhin schon mal ganz großen Dank!!!!!!!
Offline
#6 12. November 2012 11:50
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
@nockenfell:
Du bist spitze! Klasse, das klappt prima!
Ich habe die Zeilen für das Menü-Template
in meinem Fall noch etwas zurecht gerückt.
Klappt nun auch prima mit Ausklapp-Menüs.
Du hast mich gerettet!!!!
1000 Dank!
Offline
#7 12. November 2012 11:53
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Bitte. Es freut wenn die gemachte Arbeit gebraucht werden kann.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#8 12. November 2012 12:10
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Nachtrag: Das funktioniert super, wenn ich nach der Abschnittsüberschrift
als Children eine einfach Seiten habe. Was aber, wenn da direkt noch mal eine
Abschnittsüberschrift kommt ...
Also
- Abschnittsüberschrift A
-- Abschnittsüberschrift AA
--- Child AA1
--- Child AA2
-- Abschnittsüberschrift AB
--- Child AB1
--- Child AB2
Die Struktur der Internet-Präsenz ist leider so verschachtelt ;-)
Kann man das lösen oder bleib ich dann hier besser bei den Seitenlinks?
Danke Dir noch mal sehr :-)
Offline
#9 12. November 2012 12:26
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Tausche mal die Funktion getFirstChildAlias aus:
/**
* Gibt den Alias der ersten Childseite aus
* @param string $parentalias
* @param string $assign
* @param string $onlyInMenu
* @copyright Lukas Blatter
*/
public final function getFirstChildAlias($parentalias = '', $assign = '', $onlyInMenu=true)
{
$smarty = cmsms()->GetSmarty();
$children = $this->getChildren($parentalias);
if (!$children) return false;
$alias = "";
foreach($children as $child) {
if ($child['type'] == 'sectionheader' or $child['errorpage'] == 'sectionheader' or $child['type'] == 'separator' or $child['type'] == 'link') continue;
else if ($onlyInMenu and $child['show_in_menu']) {
$alias = $child['alias'];
break;
}
else if (!$onlyInMenu) {
$alias = $child['alias'];
break;
}
}
if (!$alias) return false;
if(!empty($assign)) {
$smarty->assign($assign,$alias);
return;
}
return $alias;
}
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#10 12. November 2012 12:37
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Fast ... gibt mir dann die URL der ersten Child-Seite in
der ersten Abschnittsüberschrift aus, aber nicht innerhalb
der übergeordneten Abschnittsüberschrift ...
Also ungefähr so (Auszug aus der momentanen Struktur):
- Abschnittsüberschrift A (Teil der Hauptnavigation)
-- Child A1
-- Child A2
- Abschnittsüberschrift B (Teil der Hauptnavigation)
-- Abschnittsüberschrift BA (Teil der Unternavigation)
--- Child BA1
--- Child BA2
-- Abschnittsüberschrift BB (Teil der Unternavigation)
--- Child BB1
--- Child BB2
Wenn ich in der Hauptnavigation nach Einsetzen Deiner Zeilen
auf die Abschnittsüberschrift B klicke, bekomme ich die URL
von Child A1 - und nicht von Child BA1.
Der Rest, also in der Unternavigation bzw. in der Hauptnavigation
ohne weitere untergeordnete Abschnittsüberschriften klappt prima.
Offline
#11 12. November 2012 12:46
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Naja. Das ist nun wahrscheinlich eine Definitionsfrage was korrekt ist. Hier die dazu angepasste Version:
public final function getFirstChildAlias($parentalias = '', $assign = '', $onlyInMenu=true)
{
$smarty = cmsms()->GetSmarty();
$children = $this->getChildren($parentalias);
if (!$children) return false;
$alias = false;
foreach($children as $child) {
if ($child['type'] == 'errorpage') continue;
else if ($child['type'] == 'sectionheader' or $child['type'] == 'separator' or $child['type'] == 'link') {
if ($this->hasChildren($child['alias'])) {
$alias = $this->getFirstChildAlias($child['alias'],'',$onlyInMenu);
if ($alias) break;
}
}
else if ($onlyInMenu and $child['show_in_menu']) {
$alias = $child['alias'];
break;
}
else if (!$onlyInMenu) {
$alias = $child['alias'];
break;
}
}
if (!$alias) return false;
if(!empty($assign)) {
$smarty->assign($assign,$alias);
return;
}
return $alias;
}
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#12 12. November 2012 12:53
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Knaller! Passt ...
noch mal 1000 Dank!!!!!!!!!!
LG
Stefan
Offline
#13 13. November 2012 11:26
- TheSidewinder
- hat von CMS/ms gehört
- Registriert: 13. November 2012
- Beiträge: 5
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Ist es möglich allein mit Unbearbeitetem Modul ToolBox, die Children-URL auszulesen ?
sowas wie getChildrenUrl meine ich.
Beitrag geändert von TheSidewinder (13. November 2012 11:28)
Offline
#14 13. November 2012 11:33
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Nein. Wobei die ToolBox per se unbearbeitet ist, wenn der Entwickler eine Entwicklung aus der SVN Version direkt hier postet. Wie schon geschrieben, wird diese Ergänzung bei der nächsten ToolBox Version drin sein, genau so wie ich es hier im Beitrag veröffentlicht habe.
Zudem wäre die Funktion getChildrenUrl in etwa das gleiche wie getFirstChildrenAlias. Nur ist die Funktion via Alias sinnvoller, da damit mehr gemacht werden kann.
Mit der von dir angeregten Erweiterung gibt es neu
- getFirstChildrenAlias
- getPageUrl
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#15 13. November 2012 11:35
- TheSidewinder
- hat von CMS/ms gehört
- Registriert: 13. November 2012
- Beiträge: 5
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Gibt es denn eine möglichkeit, alle Children auszulesen und als Verlinkung in ein zweites Menü "einzubetten" ?
Beitrag geändert von TheSidewinder (13. November 2012 11:37)
Offline
#16 13. November 2012 11:44
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
$tbtools->getChildren()
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#17 13. November 2012 11:57
- TheSidewinder
- hat von CMS/ms gehört
- Registriert: 13. November 2012
- Beiträge: 5
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Ich habe jetzt diesen Code:
{* CSS classes used in this template: .currentpage - The active/current page .bullet_sectionheader - To style section header hr.separator - To style the ruler for the separator *}
{if $count > 0}
{$tbtools->hasChildren("","hasChildren")}
{if $hasChildren} {assign var='children' value=$tbtools->getChildren()}
<li><a ><span class="sectionheader">{$children}</span></a>
{/if}
{/if}
Wenn ich ihn anwende wird nur Ein Stichpunkt mit Array angezeigt...
Beitrag geändert von TheSidewinder (13. November 2012 11:58)
Offline
#18 13. November 2012 12:06
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Ich zitiere die Hilfe von ToolBox (Smarty-Tools):
hasChildren([$alias],[$assign])
Prüft, ob eine festgelegte Seite untergeordnete Seiten hat.
Argumente:
[$alias] - (optional) der Seiten-Alias oder die ID der zu prüfenden Seite. Wenn kein Wert festgelegt wurde, wird die aktuelle Seite verwendet.
[$assign] - (optional) der Name der Variable, der das Ergebnis zugewiesen werden soll.Beispiel:
{$tbtools->hasChildren("","hasChildren")} {if $hasChildren}Die aktuelle Seite hat untergeordnete Seiten{else}Die aktuelle Seite hat keine untergeordneten Seiten{/if}
getChildren([$alias],[$showinactive],[$assign])
Gibt ein Array zurück, welches Informationen über die untergeordneten Seiten enthält (falls vorhanden)
Arguments:
[$alias] - (optional) der Seiten-Alias oder die ID der zu prüfenden Seite. Wenn kein Wert festgelegt wurde, wird die aktuelle Seite verwendet.
[$showinactive] - (optional) hier kann eingestellt werden, ob inaktive Seiten im Ergebnis enthalten sein sollen (Standard ist false).
[$assign] - (optional) der Name der Variable, der das Ergebnis zugewiesen werden soll.Felder:
alias - der Seiten-Alias der untergeordneten Seite
id - die Seiten-ID der untergeordneten Seite
title - der Seitentitel der untergeordneten Seite
menutext - der Menütext der untergeordneten Seite
show_in_menu - ist die Unterseite im Menü sichtbar.
type - Typ des Content Elements.
Beispiel:
{$tbtools->getChildren("","","children")} {if count($children)} {foreach from=$children item="child"} {if $child.show_in_menu} Untergeordnete Seite: id = {$child.id} Alias = {$child.alias} {/if} {/foreach} {/if}
Beachte, dass dies nur die Children der nächsten Ebene ausliest. Nicht die Children aller Ebenen.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#19 13. November 2012 12:08
- TheSidewinder
- hat von CMS/ms gehört
- Registriert: 13. November 2012
- Beiträge: 5
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Ok, ich habs hingekriegt:
{* CSS classes used in this template:
.currentpage - The active/current page
.bullet_sectionheader - To style section header
hr.separator - To style the ruler for the separator *}
{if $count > 0}
{$tbtools->hasChildren("","hasChildren")}
{if $hasChildren}
{$tbtools->getChildren("","","children")}
{foreach from=$children item="child"}
{if $child.show_in_menu}
<ul>
<li><a href="EureURL/index.php?page={$child.alias}"><span class="sectionheader">{$child.title}</span></a></li>
</ul>
{/if}
{/foreach}
{/if}
{/if}
Danke für die Hilfe.
Beitrag geändert von TheSidewinder (13. November 2012 12:11)
Offline
#20 13. November 2012 12:21
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Sauberer wäre
{* CSS classes used in this template:
.currentpage - The active/current page
.bullet_sectionheader - To style section header
hr.separator - To style the ruler for the separator *}
{if $count > 0}
{$tbtools->hasChildren("","hasChildren")}
{if $hasChildren}
{$tbtools->getChildren("","","children")}
{foreach from=$children item="child"}
{if $child.show_in_menu}
<ul>
<li><a href="{$tbtools->getPageUrl($child.alias)}"><span class="sectionheader">{$child.title}</span></a></li>
</ul>
{/if}
{/foreach}
{/if}
{/if}
-> Die URL über die Funktion $tbtools->getPageUrl aufrufen
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#21 14. November 2012 05:45
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Gibt es denn eine möglichkeit, alle Children auszulesen und als Verlinkung in ein zweites Menü "einzubetten" ?
Ähmm, das kann doch der MenüManager auch ohne ein zusätzliches Modul ... musst nur die entsprechenden Parameter mitgeben.
Offline
#22 23. November 2012 11:26
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Hallo Nockenfell,
Deine Hilfe war echt klasse! Danke noch mal dafür ...
Aber ich habe noch eine Frage: Gibt es noch die Möglichkeit
festzustellen, ob eine Child-Seite aktive oder inaktiv ist?
Wenn z.B. die erste inaktiv ist, das dann automatisch die zweite
(also erste aktive) genommen wird?
Ich würde gerne eine Zeitsteuerung über AdvancedContent
einbinden und damit die Seite nach dem Verfallsdatum inaktiv
stellen ... dann ist sie aber noch im System und wird über den
Menümanager noch als Link angegeben - was dann in einen Fehler
läuft ...
Danke Dir für die Hilfe :-)
Offline
#23 24. November 2012 21:35
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Das ist möglich. Ich habe dazu die Funktionen noch ein klein wenig erweitert:
/**
* Gibt den Alias der ersten Childseite aus
* @param string $parentalias
* @param string $assign
* @param string $onlyInMenu
* @copyright Lukas Blatter
*/
public final function getFirstChildAlias($parentalias = '', $assign = '', $onlyInMenu=true)
{
$smarty = cmsms()->GetSmarty();
$children = $this->getChildren($parentalias);
if (!$children) return false;
$alias = false;
foreach($children as $child) {
if (!$child['active']) continue; // inative Seiten überspringen
else if ($child['type'] == 'errorpage') continue; // Error-Pages überspringen
else if ($child['type'] == 'sectionheader' or $child['type'] == 'separator' or $child['type'] == 'link') { // Bei Typ Sectionheader, Spearator oder Link, schauen ob es Unterseiten gibt.
if ($this->hasChildren($child['alias'])) {
$alias = $this->getFirstChildAlias($child['alias'],'',$onlyInMenu);
if ($alias) break;
}
}
else if ($onlyInMenu and $child['show_in_menu']) {
$alias = $child['alias'];
break;
}
else if (!$onlyInMenu) {
$alias = $child['alias'];
break;
}
}
if (!$alias) return false;
if(!empty($assign)) {
$smarty->assign($assign,$alias);
return;
}
return $alias;
}
/**
* based on $cgsimple->get_children() by Robert Campbell
* Gibt einer Array mit den PageIds aller Child Seiten einer bestimmten Seite oder der aktuellen Seite zurück.
* @param string $alias
* @param boolean $showall
* @param string $assign
*/
public final function getChildren($alias = '',$showall = false, $assign = '')
{
$gCms = cmsms();
$smarty = $gCms->GetSmarty();
if( $alias == '' ) {
$alias = $smarty->get_template_vars('page_alias');
}
else
$alias = $this->getAlias($alias);
if(!$alias) return false;
$hm = cmsms()->GetHierarchyManager();
$parent = $hm->getNodeByAlias($alias);
if( !$parent ) { return false; }
$child_nodes = $parent->getChildren(false,$showall);
if( !is_array($child_nodes) || count($child_nodes) == 0 ) return false;
$results = array();
foreach( $child_nodes as $node ) {
$content = $node->getContent();
if( !is_object($content) ) continue;
$row = array('alias'=>$content->Alias(),'id'=>$content->Id(),
'title'=>$content->Name(),'menutext'=>$content->MenuText(),
'show_in_menu'=>$content->ShowInMenu(),'active' =>$content->Active(),'type'=>$content->Type());
$results[] = $row;
}
if( !count($results) ) return false;
if(!empty($assign)) {
$smarty->assign($assign,$results);
return;
}
return $results;
}
Nun werden bei der getFirstChildAlias inative Seiten übersprungen. Beim getChildern gibt es neu den Parameter $child.active
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#24 26. November 2012 09:12
- stefanauskoeln
- probiert CMS/ms aus
- Registriert: 16. April 2012
- Beiträge: 60
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Perfekt!!!!
Noch mal 1000 Dank für Deine Hilfe!!!!!!
VG
Stefan
Offline
#25 26. November 2012 09:27
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Menümanager interner Link immer auf die erste untergeordnete Seite
Das ganze ist übrigens im aktuellen Release von ToolBox 1.3.0 enthalten
http://dev.cmsmadesimple.org/project/fi … ckage-1070
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
Seiten: 1