Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 09. August 2022 18:26

2Cee.de
probiert CMS/ms aus
Ort: Dreischor
Registriert: 09. Mai 2011
Beiträge: 61

Template MenuManager zu Navigator umbauen im Zusammenhang mit PHP8

Hallo liebe CMSms-Pros.
Ich stecke mal wieder fest und hoffe, dass ich kein Thread übersehen habe, welches dieses Thema behandelt.
Vorab: Ich bin gerne bereit für Unterstützung zu bezahlen und / oder natürlich wieder fürs Forum zu spenden. Ich nehme den Support nicht selbstverständlich hier und ich glaube diesmal ist mein Problem recht individuell.

Ich habe nun einige Zeit versucht das Problem einzugrenzen und hoffe, dass ich es richtig beschreiben kann und nichts wichtiges übersehen habe.
Da einige Hoster bereits damit "drohen" PHP7 komplett einzustellen und nur noch PHP8 zu unterstützen, habe ich damit begonnen die noch bestehenden Websites umzustellen. Bisher ging das auch ganz gut, aber nun habe ich zwei Websites, bei denen ich davon ausgehe, dass das Problem an einem alten MenuManager-Template liegt.

Ja, ich habe inzwischen auch gehört, dass man dies mit CMSms 2 nicht mehr nutzen sollte, aber es ist leider noch in Verwendung und das bisher ohne Probleme. Sobald ich nun also auf PHP8 switche knallt die Seite genau bei der Implementierung des Menüs. Nehme ich dieses raus, funktioniert alles einwandfrei.

Es ist ein recht individuelles Menü. Ich habe nun geschaut, wie ich das auf ein Navigator Template umbauen könnte, aber ich komme leider einfach nicht weiter.
Vor allem weil das Menü einige Male
$node->depth (Depth (level) of this node in the current menu)
$node->prevdepth (Depth (level) of the node that was right before this one)
verwendet, was anscheinend im Navigator nicht existiert bzw. ich nicht sehe, wie ich es alternativ umsetzen könnte. Ich habe einiges probiert, aber ich bin für den Moment echt am Ende mit meinem Latein.

$node->depth steht zwar auch nicht mehr in der Dokumentation von Navigator, wird aber wohl noch interpretiert, während $node->prevdepth nichts mehr ausgibt. Vermutlich lässt sich die Sache wesentlich eleganter lösen...

Ich wäre also für einen Tipp dankbar, wie ich das Template passend zu einem Navigator Template umbauen kann bzw. bezahle auch gerne jemanden es für mich zu tun.

Die aktive Website - noch auf PHP7.4
www.die-radgeber.de

Es handelt sich um das Menü an der Seite.

Das MenuManager Template:

[== php ==]
{MenuSimpleInPosition}
{assign var='number_of_levels' value=10000}
{assign var='default_show' value=''}
{counter name='menu_simple_in' assign='unique_id'}

{if $default_show == '' || strpos($position|cat:'.', $default_show|cat:'.') === 0}
    {assign var='default_show' value=$position}
{/if}

{if isset($menuparams.number_of_levels)}
    {assign var='number_of_levels' value=$menuparams.number_of_levels}
{/if}

{if $count > 0}
    {if $number_of_levels > 1}
        <label for="toggle-main-checkbox{$unique_id}" class="toggle-main-label fa fa-bars visible-phone">Menü</label>

        <input id="toggle-main-checkbox{$unique_id}" class="hidden" type="checkbox" value="1" />

    {/if}
<div id="navibox">
<div class="search">{search detailpage="suchergebnis" resultpage="suchergebnis"}</div>
    <ul class="parent level1" data-default-show="{$default_show|replace:'.':'-'}">
       
        {foreach from=$nodelist item=node}
            {if $node->depth > $node->prevdepth}
                {repeat string="<ul class='children level{$node->depth}'>" times=$node->depth-$node->prevdepth}

            {elseif $node->depth < $node->prevdepth}
                {repeat string='</li></ul>' times=$node->prevdepth-$node->depth}</li>

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

            {assign var='classes' value="level{$node->depth} node{$node->id} hierarchy{$node->hierarchy|replace:'.':'-'}"}
            
            {if $node->parent == true or $node->current == true}
                {assign var='classes' value=$classes|cat:' menuparent'}
                
                {if $node->current == true}
                    {assign var='classes' value=$classes|cat:' menuactive'}
                {/if}
            {/if}
            
            {if $node->type != 'sectionheader' and $node->type != 'separator'}
                <li class="{$classes}">
                
                {if $node->children_exist}
                    <label for="hierarchy{$node->hierarchy|replace:'.':'-'}" class="toggle level{$node->depth} fa fa-angle-down"></label>                 
                {/if}
                
                
                <a class="{$classes}" href="{$node->url}"><span>{$node->menutext}</span></a>
                
                {if ($number_of_levels > 1) && $node->children_exist}
                    {if strpos($default_show|cat:'.', $node->hierarchy|cat:'.') === 0}
                      <input id="hierarchy{$node->hierarchy|replace:'.':'-'}" class="hidden" type="checkbox" checked="checked" value="1" />
                    {else}
                      <input id="hierarchy{$node->hierarchy|replace:'.':'-'}" class="hidden" type="checkbox" value="1" />
                    {/if}
                {/if}
            {/if}
        {/foreach}

        {repeat string='</li></ul>' times=$node->depth-1}</li>
<li class="toggle-main-label-end_li"><label for="toggle-main-checkbox{$unique_id}" class="toggle-main-label-end fa fa-caret-up visible-phone"></label></li>

    </ul>



</div>

{/if}

Der User Defined Tag "MenuSimpleInPosition":

[== php ==]
$gCms = cmsms();
$contentops = $gCms->GetContentOperations();
$content_obj = $contentops->getContentObject();
$smarty->assign('position', $content_obj->Hierarchy());

Falls mehr Informationen nötig sind, stelle ich die natürlich gerne bereit. Ich wäre unendlich dankbar, wenn mir jemand das Thema von der Seele nehmen könnte. Ich habe nur noch ein paar Websites, die ich aus Loyalität betreue und am Laufen halte und würde diese gerne noch auf PHP8 bringen können.

CMSms 2.2.16 ist installiert.

Vielen vielen herzlichen Dank!
Christin

Beitrag geändert von 2Cee.de (09. August 2022 18:29)

Offline

#2 12. August 2022 21:40

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.227
Webseite

Re: Template MenuManager zu Navigator umbauen im Zusammenhang mit PHP8

Hallo Christin,

hast Du schon ddie Dokumentation angeschaut?
https://docs.cmsmadesimple.org/layout/d … /navigator

da gibt es:
$node->hierarchy -- Hierarchy position. (i.e. 1.3.3)

und

$node->parent -- TRUE if this node is a parent of the currently selected page
$node->current -- TRUE if this node is the currently selected page
$node->has_children -- TRUE if this node has any children at all.
$node->children -- An array of node objects representing the displayable children of this node. Not set if node does not have children to display.
$node->children_exist -- TRUE if this node has any children that could be displayed but are not being displayed due to other filtering parameters (number of levels, etc).

damit musstest Du doch schaffen können was Du willst.

Ich schaue es noch in Detail an bei was Du mir privat geschickt hast.

MfG
Jan


Ubuntu 16.04 KDE - Kubuntu 18.04 / win10 (1 duo-boot laptop)- LAMP
Raspi 4b mit Ubuntu 20.04 (64bit) und Mate.

Offline

#3 14. August 2022 14:03

2Cee.de
probiert CMS/ms aus
Ort: Dreischor
Registriert: 09. Mai 2011
Beiträge: 61

Re: Template MenuManager zu Navigator umbauen im Zusammenhang mit PHP8

Hallo Jan.
Danke für Dein Feedback.
Ja, ich habe in die Dokumentation geschaut und mir alle Möglichkeiten angesehen.
Das Problem mit meinem Template ist, dass sich in diesem an bestimmten Stellen auf das vorherige node bezogt wird. Und diese Möglichkeit besteht im Navigator anscheinend nicht mehr. Es steht auch über all "this node".
$node->prevdepth bezieht sich auf das vorherige node, was im Aufbau meines Template so verwendet wird. Falls es wirklich keine Möglichkeit mehr gibt, wie $node->prevdepth müsste die Logik des Templates wohl umgebaut werden.
Danke und viele Grüße Christin

Beitrag geändert von 2Cee.de (14. August 2022 14:03)

Offline