[TYPO3-core] Bug 633

Michael Stucki michael at typo3.org
Thu Jan 26 14:04:40 CET 2006


It seems this was never changed. Martin & Franz, can you please tell
Bernhard if his comments/changes are ok?

- michael

Bernhard Kraft wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Hello,
> 
> A compount mail answering all questions from Martin and Franz regarding
> the Bugfix for #633.
> 
> New patch is attached.
> 
> - -----------------------------------------------------------------------
> Martin Kutschker wrote:
>> Why is directoryLevel a property and not a local variable? If I read the
>> patch correct $this->directoryLevel is your contribution. I suggest
>> a) that you initalize it to 0 as it's used later in calculations and
> 
> Done.
> 
> 
>> b) make it local ($directoryLevel instead of $this->directoryLevel).
> 
> Done.
> 
>> 
>> Is there a wrong indentation in the patch?
>> 
>> + return $retVal;
> 
> Was a mistake. Sorry. Fixed that also.
> 
> 
>> The patch also adds a stdWrap to special.value. Please add the correted
>> documentation to TSref.
> 
> (Just for completeness again ... I already answered that):
> In TSRef it is already stated that this IS a stdWrap field (but it wasn't)
> so the documentation is more up-to-date then the code :)
> 
> 
>> As for the patch itself. I'm not really familiar with the menu code.
> 
> I was asked 3 times in the last few weeks for the patch because it is not
> available at the URL where I published it first because the domain it was
> hosted on was moved. I had to direct all those people to the bugtracker
> where the patch also resides.
> 
> I didn't get any single "bugfix bug report" ... meaning it seems to work
> properly.
> 
> This part of the menu code isn't that complicated:
>       $startLevel = $directoryLevel?$directoryLevel:$this->entryLevel;
>       if (is_array($this->tmpl->rootLine[$startLevel+$this->menuNumber]))
>       {
>         $nextMParray = $this->MP_array;
>         if
>         ($this->tmpl->rootLine[$startLevel+$this->menuNumber
['_MOUNT_OL'])
>          { // In overlay mode, add next level MPvars as well:
>           $nextMParray[] =
>           $this->tmpl->rootLine[$startLevel+$this->menuNumber
['_MP_PARAM'];
>         }
>         $this->nextActive =
>         $this->tmpl->rootLine[$startLevel+$this->menuNumber]['uid']
(count($nextMParray)?':'.implode(',',$nextMParray):'');
>       } else {
>         $this->nextActive = '';
>       }
> It just get's evaluated if the "actualy rendered" menu level is in the
> rootline - if this is the case the page is "active" (opened) and the
> sub-items shall get shown (this is done by setting this->nextActive)
> 
> - -----------------------------------------------------------------------
> Holzinger Franz wrote:
>> Hello Bernhard,
>>
>>
>> from the TSRef documentation:
>>
>>
>>>If .value is not set, the default uid is the .entryLevel uid.
>>
>>
>> Maybe this is missing in your code.
> 
> Added it.
> 
>> This would be a usefull general function to get the depth of a page to
>> the rootline.
> 
> Added it to t3lib_tstemplate.php ... i think that's the correct location
> as the rootline is also stored in this object ...
> 
> If you would prefer another name than "getRootlineLevel()" let's disscuss
> your preference :)
> 
>> In t3lib/class.t3lib_tstemplate.php line 442 you have
>>
>>
>>>$this->rootLine[] = $this->absoluteRootLine[$a];
>>
>>
>> You have written:
>>
>>
>>>+                if
>>>($this->tmpl->rootLine[$this->entryLevel+$this->menuNumber+$this->directoryLevel
['_MOUNT_OL'])
>>> {    // In overlay mode, add next level MPvars as well:
>>>+                    $nextMParray[] =
>>>$this->tmpl->rootLine[$this->entryLevel+$this->menuNumber+$this->direcotryLevel
['_MP_PARAM'];
>>>                 }
>>
>>
>> So hopefully this works, however you are relying here on the index
>> number of rootLine in the template object. This is however not
>> documented anywhere that you can rely on this index number. Or am I
>> missing something?
> 
> From:
> http://www.php.net/manual/en/language.types.array.php
> ********
> <?php
> $arr = array(5 => 1, 12 => 2);
> 
> $arr[] = 56;    // This is the same as $arr[13] = 56;
>                // at this point of the script
> ********
> Note:  As mentioned above, if you provide the brackets with no key
> specified, then the maximum of the existing integer indices is taken, and
> the new key will be that maximum value + 1 . If
> no integer indices exist yet, the key will be 0  (zero). If you specify a
> key that already has a value assigned to it, that value will be
> overwritten. ********
> 
> So the values will get assigned in a "defined" order starting from 0 and
> counting up.
> 
> This is used in many places in the core and you can rely on the indexes
> being in a properly sorted order :)
> 
>> I cannot believe that this works:
>>
>>
>>>$this->tmpl->rootLine[$this->entryLevel+$this->menuNumber+$this->directoryLevel]
>>
>>
>> $this->directoryLevel are e.g. numbers from 1 to 10. This is added with
>> entryLevel and the menuNumber to give the index of the rootLine array.
>> Or is only one number valid at a call of this function?
> 
> Yes. There was a problem. Normally nobody would normally try (until now -
> I did :) to use special = directory and "entryLevel =" at the same time
> (in the same HMENU).
> 
> Currently it behaves in such a way that it shows the menu depending if you
> are enough pages from the "real" rootpage in the tree (if entryLevel=1 you
> need to be on a subpage of the rootpage and the menu will get shown) But
> the menu get's not shown FROM the level you define by entryLevel as it is
> the case with "no-special=directory" menus (So you will only see the
> second level items) but always from the rootpage you define by the
> special.value property.
> 
> I know a little bit confusing but try out with the current code how it
> behaves and you will know what I mean.
> 
>>>direcotryLevel
>>
>>
>> --> directoryLevel
> 
> Fixed. (Removed and replaced by startLevel)
> 
> - -----------------------------------------------------------------------
> 
> 
> I would really like to get this into 4.0beta2 (or RC1)
> 
> If you have any questions contact me via ICQ: 113830220
> 
> 
> greets,
> Bernhard
> - --
> - ----------------------------------------------------------------------
> "Freiheit ist immer auch die Freiheit des Andersdenkenden"
> Rosa Luxemburg, 1871 - 1919
> - ----------------------------------------------------------------------
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.1 (GNU/Linux)
> Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org
> 
> iD8DBQFDvc0uIl4dkVkDMFkRAtj/AJ96fmG3CUbkEfFEA5g6vzXyKSHs3QCfQQQv
> NOThV7a5S7AROV8VmwGWUZs=
> =u+JA
> -----END PGP SIGNATURE-----

-- 
Use a newsreader! Check out
http://typo3.org/community/mailing-lists/use-a-news-reader/



More information about the TYPO3-team-core mailing list