Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SMF] SSI.php - modyfikacja pliku
Forum PHP.pl > Forum > PHP
Tomplus
Mam kod w pliku SSI.php z forum Simple Machine Forum.
Poniżej mam funkcję w której nie trzeba zwracać uwagę na to co wyświetli, a raczej chodzi o to dlaczego nie działa ?

ORGINALNA. (echo) - oczywiście działa świetnie
  1. function ssi_welcome($output_method = 'echo')
  2. {
  3. global $context, $txt, $scripturl;
  4.  
  5. if ($output_method == 'echo')
  6. {
  7. if ($context['user']['is_guest'])
  8. echo sprintf($txt['welcome_guest'], $txt['guest_title']);
  9. else
  10. echo $txt['hello_member'], ' <strong>', $context['user']['name'], '</strong>', allowedTo('pm_read') ? ', ' . $txt['msg_alert_you_have'] . ' <a href="' . $scripturl . '?action=pm">' . $context['user']['messages'] . ' ' . ($context['user']['messages'] == '1' ? $txt['message_lowercase'] : $txt['msg_alert_messages']) . '</a>' . $txt['newmessages4'] . ' ' . $context['user']['unread_messages'] . ' ' . ($context['user']['unread_messages'] == '1' ? $txt['newmessages0'] : $txt['newmessages1']) : '', '.';
  11. }
  12. // Don't echo... then do what?!
  13. else
  14. return $context['user'];
  15. }



WŁASNA ($SHOW .=)
  1. function ssi_welcome($output_method = 'echo')
  2. {
  3. global $context, $txt, $scripturl;
  4. if ($output_method == 'echo')
  5. {
  6. if ($context['user']['is_guest']) $SHOW .= sprintf($txt['welcome_guest'], $txt['guest_title']);
  7. else $SHOW .= ' ',$txt['hello_member'], ' <strong>', $context['user']['name'], '</strong>', allowedTo('pm_read') ? ', ' . $txt['msg_alert_you_have'] . ' <a href="' . $scripturl . '?action=pm">' . $context['user']['messages'] . ' ' . ($context['user']['messages'] == '1' ? $txt['message_lowercase'] : $txt['msg_alert_messages']) . '</a>' . $txt['newmessages4'] . ' ' . $context['user']['unread_messages'] . ' ' . ($context['user']['unread_messages'] == '1' ? $txt['newmessages0'] : $txt['newmessages1']) : '', '.';
  8. }
  9. else return $context['user'];
  10. }

Pojawia się błąd.
Kod
Parse error: syntax error, unexpected ',' in /forum/SSI.php on line 169


Dlaczego po zmianie echo na zmienną przestało działać wyświetlanie ?

Ja znam teraz tylko jeden sposób na naprawę, aby funkcjonowało zgodnie z moimi oczekiwaniami czyli przepisać każdą funkcję stosując normalne kodowanie.
thek
Całe przypisanie do $SHOW bruździ bo używa , a nie . jako symbolu konkatenacji stringów. Echo jest konstruktem, który pozwala zastosować , z racji podawania kolejnych stringów jako parametrów dla niego. Innymi słowy:
  1. echo $cos, 'tekst', $cos2, $cos3;

jest poprawne. Ale już
  1. $SHOW .= $cos, 'tekst', $cos2, $cos3;

jest błędem składni. Ot całe magiczne know-how. Zamień , na . i powinno hulać.
Tomplus
Masz racje. Dzięki.

Ale raczej jest na odwrót.

Bo wszędzie zmienna $SHOW używa kropki, a tylko w funkcjach SSI.php jest przecinek i kropka w jednej linii jednocześnie.



thek
To ja chyba widzę za dużo przecinków winksmiley.jpg Pozwól że przekleję Twój kod i zaznaczę na czerwono gdzie dla $SHOW w Twojej metodzie widać przecinki.

$SHOW .= ' ',$txt['hello_member'], ' <strong>', $context['user']['name'], '</strong>', allowedTo('pm_read') ? ', ' . $txt['msg_alert_you_have'] . ' <a href="' . $scripturl . '?action=pm">' . $context['user']['messages'] . ' ' . ($context['user']['messages'] == '1' ? $txt['message_lowercase'] : $txt['msg_alert_messages']) . '</a>' . $txt['newmessages4'] . ' ' . $context['user']['unread_messages'] . ' ' . ($context['user']['unread_messages'] == '1' ? $txt['newmessages0'] : $txt['newmessages1']) : '', '.';

I naprawdę zwracaj uwagę oraz sprawdź dwa razy, gdy ktoś Ci mówi, że jednak jest inaczej niż myślisz. Popraw te przecinki na kropki, a powinno zadziałać.

Co do uzycia przecinków i kropek w SSI.php, to może to wynikać z dorzucenia tego skryptu przez kogoś, kto nie zwrócił na to uwagi bo całość działałajak powinna i uzycie w echo jest poprawne, więc nie sypało nawet notice'a smile.gif Ty przerabiałeś i już na to nie zwróciłeś uwagi i stąd nagle błędy. Trudno na początek zauważyć to, bo można mieć wrażenie, że przecinki oddzielają parametry którejś funkcji wewnątrz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.