Uwaga! Od sierpnia 2017 forum jest w trybie tylko do odczytu.

Dlaczego? Dlatego, że społeczność TYPO3 przeniosła się na slack'a i stackoverflow:
  • Przeczytaj artykuł wprowadzający do slacka, w którym dowiesz gdzie i jak się zarejestrować.
  • Jeżeli masz pytania odnośnie Polskiej Społeczności TYPO3 zapraszamy na kanał slack'a #community-pl. Rozmawiamy tam w języku polskim.
  • Pytania dotyczące samego TYPO3 zadawaj po angielsku na stackoverflow oznaczając je tagiem "typo3". Następnie posługując się linkiem do tego pytania postaraj się zachęcić ludzi z kanału slack'a #typo3-cms lub bardziej pasujących kanałów tematycznych, żeby na nie odpowiedzieli.
  • Możesz też oczywiście zadawać pytania na slacku bez zakładania wątków na stackoverflow, ale wówczas wiedza ta nie jest indeksowana przez googla i część osób nie będzie chciała Ci z tego powodu pomagać.
  • Dla części osób dzielących się wiedzą ważne jest też budowanie reputacji na stackoverflow. Jest to kolejny powód dla którego powinieneś zadawać pytania na stackoverflow by zwiększyć swoje szanse na znalezienie odpowiedzi. Pamiętaj, żeby oceniać odpowiedzi!
Tematy bez nowych odpowiedzi

RTE - problem z folder tree w browse_links.php (home.pl)


Autor Wiadomość
Napisane: 23.10.2009 [23:18]
banama
Twórca tematu
zarejestrowany: 06.01.2009
Posty: 58
Witam

Generalnie mam problem (instalacja na home.pl)
opisany tutaj

Problem objawia się tak, że po wybraniu z RTE "Wstaw odsyłacz" -> "Plik", mam listę folderów bez przypisanych odsyłaczy. Jeśli folder nie ma podfoldera to sobie mogę klikać do świąt a i tak plików w folderze nie zobacze ... Jeśli folder ma podfolder to mogę kliknąć plusik i wtedy się rozwinie i jednocześnie wyświetli swoją zawartość.

Namierzyłem odpowiednie miejsce w pliku:
typo3/sysext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php

PHP
function wrapTitle($title,$v) {
  if ($this->ext_isLinkable($v)) {
    $aOnClick = 'return jumpToUrl(\''.$this->thisScript.'... ciachnąłem żeby nie psuć widoku .... ;
    return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$title.'</a>';
  } else {
    return '<span class="typo3-dimmed">'.$title.'</span>';
  }
}

Dostaję zatem listę folderów z elementami otoczonymi spanem a nie znacznikiem a. Oczywiście jak za else podstawię ręcznie return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$title.'</a>'; to działa.

Pytanie jak poradzić sobie z problemem bardziej elegancko - bez grzebania w kodzie sysexta rtehtmlarea?

Nadmienię, że wyśledziłem również tego typu odwołania $GLOBALS['FILEMOUNTS'] = $GLOBALS['BE_USER']->returnFilemounts(); ale na tym etapie mojej wiedzy mogę sobie na to tylko popatrzeć icon_eek.gif
Napisane: 24.10.2009 [12:10]
tomkraw1
admin
zarejestrowany: 14.07.2008
Posty: 530
Może głupie pytanie ale czy masz zmodyfikowany index.php dla problemu występującego u home.pl? (http://dev.typo3.pl/dokumentacja/zarzadzanie-systemem/instalacja-systemu/#c433).


pozdrawiam
Tomek
Napisane: 24.10.2009 [14:31]
banama
Twórca tematu
zarejestrowany: 06.01.2009
Posty: 58
Tak, zawsze pamiętam o modyfikacji index.php na serwerach home.pl.
Napisane: 24.10.2009 [15:09]
tomkraw1
admin
zarejestrowany: 14.07.2008
Posty: 530
To może pójdźmy dalej. Wydaje mi się, że trzeba się przyjrzeć funkcji ext_isLinkable. Jeśli się nie pogubiłem to jest ona zdefiniowana w pliku typo3/class.browse_links.php (localFolderTree->ext_isLinkable). Ta sprawdza czy w ścieżce nie występują "_temp_" lub "_recycler_" oraz czy funkcja t3lib_BEfunc::getPathType_web_nonweb zwraca wartość "web". getPathType_web_nonweb sprawdza czy na początku ścieżki znajduje się to co zwróci funkcja t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT').

Myślę więc że t3lib_div::getIndpEnv to jest coś co powinieneś przeanalizować. A więc "Testing suggestions" i analiza przypadku TYPO3_DOCUMENT_ROOT.

Może to jeszcze jakiś kwiatuszek związany ze specyfiką home.pl.


pozdrawiam
Tomek
Napisane: 24.10.2009 [18:12]
banama
Twórca tematu
zarejestrowany: 06.01.2009
Posty: 58
Dzięki za odpowiedź.

Pewnie kombinuję jak koń pod górę, ale wyświetliłem w drzewie folderów wartości $v['path']. Tablica $v jest argumentem występującym przypomnę tutaj:

PHP
function wrapTitle($title,$v)	{
		if ($this->ext_isLinkable($v))	{
			$aOnClick = 'return jumpToUrl(\''.$this->thisScript.'?act='.$GLOBALS['SOBE']->browser->act.'&editorNo='.$GLOBALS['SOBE']->browser->editorNo.'&contentTypo3Language='.$GLOBALS['SOBE']->browser->contentTypo3Language.'&contentTypo3Charset='.$GLOBALS['SOBE']->browser->contentTypo3Charset.'&mode='.$GLOBALS['SOBE']->browser->mode.'&expandFolder='.rawurlencode($v['path']).'\');';
			return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$title.'('.$v['path'].')</a>';
		} else {
			return '<span class="typo3-dimmed">'.$title.'('.$v['path'].')</span>';
		}
	}


Porównałem oba widoki na serwerze w home.pl oraz na innym.

Na serwerze home.pl dostaję np.:
fileadmin/(/fileadmin/)
user_upload(/fileadmin/user_upload/)

Zaś na drugim serwerze dostaję:
fileadmin/(/home/web/nazwa_konta/htdoc/fileadmin/)
user_upload(/home/web/nazwa_konta/htdoc/fileadmin/user_upload/)

Coś czuję, że problem leży w argumencie funkcji. Grzebiąc dalej (przyznaję mocno na czuja) doszedłem do t3lib/class.t3lib_foldertree.php
I tutaj mamy funkcję getBrowsableTree(), która wypluwa coś takiego return $this->printTree($treeArr);
W funkcji tej (czy też metodzie) mamy $this->MOUNTS.
A $this->MOUNTS = $GLOBALS['FILEMOUNTS'];
Kurcze co dalej? A może w ogóle zabrnąłem w ślepy zaułek ...
Napisane: 25.10.2009 [02:50]
banama
Twórca tematu
zarejestrowany: 06.01.2009
Posty: 58
tomkraw1 miałeś rację.
Na home.pl TYPO3_DOCUMENT_ROOT =
i stąd problem w t3lib/class.t3lib_befunc.php:

PHP
public static function getPathType_web_nonweb($path) {
  return t3lib_div::isFirstPartOfStr($path, t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT')) ? 'web' : '';
	}

Na razie problem rozwiązuje podmiana t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT') na '/'.t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT').
Tylko jak sobie z tym poradzić bez takiej grzebaniny w kodzie?

Idę spać ...
Napisane: 25.10.2009 [09:53]
tomkraw1
admin
zarejestrowany: 14.07.2008
Posty: 530
U tego providera zmienna serwerowa SCRIPT_FILENAME jest równa SCRIPT_NAME. U innych SCRIPT_FILENAME wskazuje fizyczną bezwzględną ścieżkę do pliku.

TYPO3_DOCUMENT_ROOT powinien wskazywać to co DOCUMENT_ROOT. Z opisu getIndpEnv: "TYPO3_DOCUMENT_ROOT = Absolute path of root of documents: TYPO3_DOCUMENT_ROOT.SCRIPT_NAME = SCRIPT_FILENAME (typically)". Pusty TYPO3_DOCUMENT_ROOT nie psuje tego równania.

Spróbuj więc zmodyfikować getPathType_web_nonweb na:
PHP
public static function getPathType_web_nonweb($path) {
	//return t3lib_div::isFirstPartOfStr($path, t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT')) ? 'web' : '';
	$dr = t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT');
	if( $dr == '' )
		return 'web';
	else
		return t3lib_div::isFirstPartOfStr($path, $dr) ? 'web' : '';	
}

Wykomentowałem oryginał.

pozdrawiam
Tomek
Napisane: 26.10.2009 [08:32]
banama
Twórca tematu
zarejestrowany: 06.01.2009
Posty: 58
Dziękuję bardzo. Tak oczywiście też działa i jest bardziej elegancko.
Nie mniej jednak zostawię jeszcze temat otwarty.
Ponieważ modyfikujemy plik t3lib/class.t3lib_befunc.php, to niestety musimy o tej zmianie pamiętać przy każdej aktualizacji systemu.
A może rzeczywiście zebrać w jeden wątek wszystkie takie "kfiatki" związane z home.pl? Jeśli się nie mylę, to ktoś już kiedyś to proponował.
Napisane: 16.02.2010 [15:53]
banama
Twórca tematu
zarejestrowany: 06.01.2009
Posty: 58
Pozwolę sobie odświeżyć temat, bo w końcu miałem czas do tego wrócić.
Aby problem rozwiązać i jednocześnie nie narazić się na problemy z aktualizacją systemu, wprowadziłem u siebie poprawkę do typo3/sysext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php wykorzystując XCLASS - czyli stworzyłem do tego celu rozszerzenie, w którym podmieniłem newralgiczną metodę.

Zmianie poddałem metodę wrapTitle z klasy tx_rtehtmlarea_folderTree dodając:
$dr = t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT');
if ($this->ext_isLinkable($v) || $dr == '')
Zmiany pogrubiłem. Po tej zmianie klasa w naszym rozszerzeniu wygląda następująco:

PHP
class ux_tx_rtehtmlarea_folderTree extends tx_rtehtmlarea_folderTree {
	function wrapTitle($title,$v)	{
	    $dr = t3lib_div::getIndpEnv('TYPO3_DOCUMENT_ROOT');
		if ($this->ext_isLinkable($v) || $dr == '')	{
			$aOnClick = 'return jumpToUrl(\''.$this->thisScript.'?act='.$GLOBALS['SOBE']->browser->act.'&editorNo='.$GLOBALS['SOBE']->browser->editorNo.'&contentTypo3Language='.$GLOBALS['SOBE']->browser->contentTypo3Language.'&contentTypo3Charset='.$GLOBALS['SOBE']->browser->contentTypo3Charset.'&mode='.$GLOBALS['SOBE']->browser->mode.'&expandFolder='.rawurlencode($v['path']).'\');';
			return '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.$title.'</a>';
		} else {
			return '<span class="typo3-dimmed">'.$title.'</span>';
		}
	}
}


Do tego trzeba jeszcze dołożyć:
PHP
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php'] = t3lib_extMgm::extPath($_EXTKEY).'class.ux_tx_rtehtmlarea_browse_links.php';
w pliku ext_localconf.php

Dzięki temu nie grzebiemy w klasie t3lib/class.t3lib_befunc.php ani w typo3/sysext/rtehtmlarea/mod3/class.tx_rtehtmlarea_browse_links.php i możemy spokojnie aktualizować typo do nowszych wersji.
U mnie nawet to działa icon_smile.gif ... na razie icon_smile.gif