Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: echo? return? podstawy
Forum PHP.pl > Forum > Przedszkole
Aklim...
Witam.
Mam sobie funkcję:
Kod
function nowe_pliki($ilosc_plikow)
{
    $path = "/var/www/html/pafiledb";
    $template = "{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />";
    require $path. "/includes/mysql.php";
    $pafiledb_sql->connect($db);
    $config = $pafiledb_sql->query($db,"SELECT * FROM $db[prefix]_settings",1);
    {
  $result = $pafiledb_sql->query($db, "SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_plikow", 0);
  $info = "{DATE}";
  $text = "{NAME}";
    }
    $i = 1;
    while ($file = mysql_fetch_object($result))
    {
  $line = str_replace("{NUMBER}", $i, $template);
  $line = str_replace("{FILELINK}", "$config[3]/pafiledb.php?action=file&id=$file->file_id", $line);
  $fileline = str_replace("{NAME}", skracaj($file->file_name), $text);
  $infoline = str_replace("{DATE}", date("j.m.Y", $file->file_time), $info);
  $line = str_replace("{FULLFILENAME}", $file->file_name, $line);
  $line = str_replace("{SHORTFILENAME}", $fileline, $line);
  $line = str_replace("{INFO}", $infoline, $line);
  echo $line;
  $i++;
    }
}

Oraz deklaruję sposób odwołania do funkcji w szablonie (w szablonie [bok.tpl] wpisuję tylko {OSTATNIE_PLIKI}):
Kod
[...]
    $ilosc_plikow = "10";
    $template->set_file('bok', 'bok.tpl');
    $template->set_var(array(
  'OSTATNIE_PLIKI' => nowe_pliki($ilosc_plikow)));

I teraz efekty- kod (funkcja newfiles($show)) działa, ale wynik pojawia się w najmniej oczekiwanym miejscu strony, nie tam gdzie to wstawiłem w szablonie (czyli w akapicie, boczej częsci strony).
Użyłem więc return $line, zamiast echo $line i efektem było wyświetlanie wyniku funkcji w prawidłowym miescu, ale samo zadziałanie funkcji było nieprawidłowe, ponieważ wyświetlało tylko 1 najnowszy plik z pafiledb, a nie tyle ile zadeklarowałem w zmiennej $ilosc_plikow (czyli 10). Natomiast gdy wyrzuciłem return $line poza pętle while efektem było wyświetlanie w pożądanym miejscu 1 najstarszego pliku.
Ja oczywiście chciałbym (najprawdopodobniej z użyciem return, nie echo i możliwe, że z użyciem pętli for zamiast while [nie wiem jak- zgaduję i przypuszczam]) uzyskać efekt wyświetlania tylu plików ile zadeklaruję w tej zmiennej $ilosc_plikow i w miejscu takim, jakim już sobie wybiorę wstawienie tego {OSTATNIE_PLIKI} w szablonie bok.tpl.
Proszę o pomoc, bo sam sobie z tym nie radzę!
P.S wiem, że ten temat razi brakiem kompletnych podstaw i nie potrafię dobrze opisać problemu... nie wiem, czy ktoś go zrozumie i mi pomoże, ale mam nadzieję, że tak, bo męczę się z tym i googluję ponad 3 dni.
Pigula
return zwraca ci wartosc i dlatego jak miales w petli wyswietlilo Ci tylko najnowszy plik. natomiast poza petla wyswietlilo Ci tylko ostatni bo w petli przypisywales kolejne pliki do zmiennej $line czyli nadpisywales ta zmienna. najlepiej to w petli zapisuj do zmiennej tablicowej i zwracaj returnem poza petla cala tablice i pozniej w petli juz we wlasciwym miejscu odczytuj i wyswietlaj kolejne elementu tablicy.
Aklim...
Mniejwięcej rozumiem to co pisesz, ale wciąż nie wiem jak to zrobić... może ktoś to zaprezentuje w oparciu o kod, który podałem wcześniej, bo znając życie ja będę się z tym męczył tydzień, albo wcale tego nie zrobię, a ktoś inny zrobi to w 5 minut i będę mógł to przeanalizować, zrozumieć smile.gif
aleksander
@Aklim...:
Pigula
  1. <?php
  2.  $i = 1;
  3. while ($file = mysql_fetch_object($result))
  4. {
  5.  $line = str_replace(&#092;"{NUMBER}\", $i, $template);
  6.  $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  7.  $fileline = str_replace(&#092;"{NAME}\", skracaj($file->file_name), $text);
  8.  $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  9.  $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  10.  $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  11.  $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  12.  $tab[$i] = $line;
  13.  $i++;
  14. }
  15. return $tab;
  16. ?>

wyswietlanie:
  1. <?php
  2. for ($i=1, $i<=count($tab);$i++) echo tab[$i];
  3. ?>

powinno dzialac
Aklim...
kurcze... lama jestem. Mam 2 problemy i ten drugi najprawdopodobniej wynika z pierwszego choć nie wiem, a mianowcie:
1. nie wiem gdzie wstawić to do wyświetlania, bo dotychczas wyświetlałem w sposób:
  1. <?php
  2.  
  3. [...]
  4. $ilosc_plikow = &#092;"10\";
  5. $template->set_file('bok', 'bok.tpl');
  6. $template->set_var(array(
  7.  'OSTATNIE_PLIKI' => nowe_pliki($ilosc_plikow)));
  8.  
  9. ?>

i w pliku bok.tpl w wybranym miejscu wpisywałem tylko:
Kod
{OSTATNIE_PLIKI}

funkcją było to co podałem na początku, a teraz funkcja wygląda tak:
  1. <?php
  2.  
  3. function nowe_pliki($ilosc_plikow)
  4. {
  5. $path = &#092;"/var/www/html/pafiledb\";
  6. $tpl = &#092;"{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />\";
  7. require $path. &#092;"/includes/mysql.php\";
  8. $pafiledb_sql->connect($db);
  9. $config = $pafiledb_sql->query($db,&#092;"SELECT * FROM $db[prefix]_settings\",1);
  10. {
  11. $result = $pafiledb_sql->query($db, &#092;"SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_pli
    kow\", 0);
  12. $info = &#092;"{DATE}\";
  13. $text = &#092;"{NAME}\";
  14. }
  15. $i = 1;
  16. while ($file = mysql_fetch_object($result))
  17. {
  18. $line = str_replace(&#092;"{NUMBER}\", $i, $tpl);
  19. $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  20. $fileline = str_replace(&#092;"{NAME}\", skracaj($file->file_name), $text);
  21. $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  22. $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  23. $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  24. $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  25. $tab[$i] = $line;
  26. $i++;
  27. }
  28. return $tab;
  29. }
  30.  
  31. ?>

i samo to daje mi tylko wyświetlenie "Array", więc gdzieś muszę wpisać to
  1. <?php
  2. for ($i=1, $i<=count($tab);$i++) echo tab[$i];
  3. ?>

ale nie wiem gdzie - to pierwszy problem.
2. Gdziekolwiek nie próbowałem użyć tej pętli for z echo to parser wywalał
Kod
Parse error: parse error, unexpected ')', expecting ';' in /var/www/html/test/funkcje.php on line 466

Mam nadzieję, że wynika to z tego, że nie wiem gdzie to wstawić (choć próbowałem w różnych miejscach nawet z odrobiną logiki)...

Pomózcie... wiem, że to bezinteresowne i w ogóle mam zapewne lamerskie problemy, ale znam inne języki (taak... czytałem kursy, książki php itp.), a programista php/sql, który się tym zajmował wyparował i teraz ja muszę wszystko dokończyć :/ Radzę sobie powiem szczerz dobrze, ale tylko operując i modyfikując to co już on zrobił, a nie tworząc swoje (choć już pare rzeczy udało mi się stworzyć [edytor wysywig z bbcode smile.gif]) jeszcze raz... help sadsmiley02.gif
Pigula
bo pisalem z glowy i jest blad tongue.gif powinno byc tak:
  1. <?php
  2. for ($i=1; $i<=count($tab);$i++) echo $tab[$i];
  3. ?>

a ty nie kopiuj poprostu tylko czytaj cos robisz smile.gif

------------
pozatym komunikat o bledzie informowal cie co jest zle
Aklim...
uhu, to teraz pewnie ktoś mnie ochrzani, bo dalej sobie nie radze... tzn. już opisuję-
Całość działa, wyświetlane są ostatnie pliki, ale nie tak jak ja bym chciał. Działa to tak jak kod, który podałem na początku z tym echo, a mianowicie:
  1. <?php
  2.  
  3. function nowe_pliki($ilosc_plikow)
  4. {
  5. $path = &#092;"/var/www/html/pafiledb\";
  6. $tepl = &#092;"{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />\";
  7. require $path. &#092;"/includes/mysql.php\";
  8. $pafiledb_sql->connect($db);
  9. $config = $pafiledb_sql->query($db,&#092;"SELECT * FROM $db[prefix]_settings\",1);
  10. {
  11. $result = $pafiledb_sql->query($db, &#092;"SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_pli
    kow\", 0);
  12. $info = &#092;"{DATE}\";
  13. $text = &#092;"{NAME}\";
  14. }
  15. $i = 1;
  16. while ($file = mysql_fetch_object($result)) 
  17. {
  18. $line = str_replace(&#092;"{NUMBER}\", $i, $tepl);
  19. $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  20. $fileline = str_replace(&#092;"{NAME}\", skroc($file->file_name), $text);
  21. $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  22. $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  23. $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  24. $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  25. echo $line;
  26. $i++;
  27. }
  28. }
  29.  
  30. ?>

Ustalenie czym jest OSTATNIE_PLIKI w pliku szablonu bok.tpl:
  1. <?php
  2.  
  3. $ilosc_plikow = $ustawienia['ilosc_plikow'];
  4. $template->set_file('bok', 'bok.tpl');
  5. $template->set_var(array(
  6. 'OSTATNIE_PLIKI' => nowe_pliki($ilosc_plikow)));
  7.  
  8. ?>

Oraz wyświetlenie tego poprzez wstawienie w bok.tpl wpisu OSTATNIE_PLIKI:
  1. <p>{OSTATNIE_PLIKI}</p>

To jednak skutkowało wyświetlaniem całości nie w tym miejscu co trzeba- nie tam, gdzie to w bok.tpl usadziłem.
Więc Piguła pomógł i powstał taki kod funkcji:
  1. <?php
  2. function nowe_pliki($ilosc_plikow)
  3. {
  4. $path = &#092;"/var/www/html/pafiledb\";
  5. $tepl = &#092;"{INFO} - <a title=\"{FULLFILENAME}\" class=\"link\" href=\"{FILELINK}\">{SHORTFILENAME}</a><br />\";
  6. require $path. &#092;"/includes/mysql.php\";
  7. $pafiledb_sql->connect($db);
  8. $config = $pafiledb_sql->query($db,&#092;"SELECT * FROM $db[prefix]_settings\",1);
  9. {
  10. $result = $pafiledb_sql->query($db, &#092;"SELECT * FROM $db[prefix]_files ORDER BY file_time DESC LIMIT 0, $ilosc_pli
    kow\", 0);
  11. $info = &#092;"{DATE}\";
  12. $text = &#092;"{NAME}\";
  13. }
  14. $i = 1;
  15. while ($file = mysql_fetch_object($result))
  16. {
  17. $line = str_replace(&#092;"{NUMBER}\", $i, $tepl);
  18. $line = str_replace(&#092;"{FILELINK}\", \"$config[3]/pafiledb.php?action=file&id=$file->file_id\", $line);
  19. $fileline = str_replace(&#092;"{NAME}\", skracaj($file->file_name), $text);
  20. $infoline = str_replace(&#092;"{DATE}\", date(\"j.m.Y\", $file->file_time), $info);
  21. $line = str_replace(&#092;"{FULLFILENAME}\", $file->file_name, $line);
  22. $line = str_replace(&#092;"{SHORTFILENAME}\", $fileline, $line);
  23. $line = str_replace(&#092;"{INFO}\", $infoline, $line);
  24. $tab[$i] = $line;
  25. $i++;
  26. }
  27. return $tab;
  28.  
  29. }
  30. ?>

oraz coś do wyświetlania:
  1. <?php
  2. function pokaz_nowe_pliki($tab)
  3. {
  4. for ($i=1; $i<=count($tab);$i++) echo ($tab[$i]);
  5. }
  6. ?>

I zadeklarowanie czym jest OSTATNIE_PLIKI w szablonie bok.tpl:
  1. <?php
  2.  
  3. $ilosc_plikow = $ustawienia['ilosc_plikow'];
  4. $tab = nowe_pliki($ilosc_plikow);
  5. $template->set_file('bok', 'bok.tpl');
  6. $template->set_var(array(
  7. OSTATNIE_PLIKI => pokaz_nowe_pliki($tab)));
  8.  
  9. ?>

oraz wstawienie tego wpisu w plik szablonu bok.tpl:
  1. <p>{OSTATNIE_PLIKI}</p>

Efekt jest taki sam jak poprzednio- ostatnie pliki pojawiają się w najmniej oczekiwanym miejscu gdzieś na końcu strony będąc lekko pod innym tekstem.

Nie wiem czemu tak jest, najwyraźniej nie mogę tam nigdzie użyć echo, a return w funkcji nowe_pliki powinno już zwracać gotowy tekst w postaci ostatnich iluś ($ilosc_plikow) plików. Nie wiem, jak powinien wyglądać taki kod. Pokażę dla przykładu działający kod tak jak należy, który wyświetlam w ten sam sposób- może to pomoże (napisany przez programiste, ktory sie tym zajmowal wczesniej...).
  1. <?php
  2.  
  3. function parsuj_text($n)
  4. {
  5. global $lang;
  6. $date_format = get_date_format();
  7. $date_offset = get_date_offset();
  8. $url = './../ostatnie/text.txt';
  9. $array = @file($url);
  10. if (!$array)
  11. {
  12. $txt = $jezyk['BRAK_PLIKU'];
  13. }
  14. else
  15. {
  16. $item = array();
  17. if ($n <= ((int)(sizeof($array) / 4)))
  18. {
  19. for ($i = 0; $i < $n; $i++)
  20. {
  21. $item[$i]['date'] = date(&#092;"j.m.Y\", ($array[4 * $i + 1] + $date_offset));
  22. $item[$i]['title'] = $array[* $i + 2];
  23. $item[$i]['link'] = $array[* $i + 3];
  24. $txt .= $item[$i]['date'] . ' - <a href=\"' . $item[$i]['link'] . '\" title=\"' . $item[$i]['title'] . '\">' . $item[$i]['title'] . '</a><br />';
  25. }
  26. }
  27. else
  28. {
  29. for ($i = 0; $i < ((int)(sizeof($array) / 4)); $i++)
  30. {
  31. $item[$i]['date'] = date(&#092;"j.m.Y\", ($array[4 * $i + 1] + $date_offset));
  32. $item[$i]['title'] = $array[* $i + 2];
  33. $item[$i]['link'] = $array[* $i + 3];
  34. $txt .= $item[$i]['date'] . ' - <a href=\"' . $item[$i]['link'] . '\" title=\"' . $item[$i]['title'] . '\">' . $item[$i]['title'] . '</a><br />';
  35. }
  36. }
  37. }
  38. return $txt;
  39. }
  40.  
  41. ?>

Wyświetlanie:
  1. <?php
  2.  
  3. $template->set_file('gora', 'gora.tpl');
  4. $template->set_var(array(
  5. 'TEXT' => parsuj_text($ustawienia['txt_na_strone'])));
  6.  
  7. ?>

Potem tylko wstawiam {TEXT} w pliku i mam zawartość (wykonanie funkcji parsuj_text($n)) w miejscu jakie sobie ustale w tym szablonie. Wyraźna różnica to brak echo.

Any idea? Help... tak, wiem- powinnem sobie ciachnąć łeb, bo straszna maruda jestem i ciągle mam problemy... pomóżcie sadsmiley02.gif
Aklim...
Kurcze, edytowac nie mogę.
Nie ma odpowiedzi, czyli się tego nie da zrobić?
jejku... zależy mi na tym, bo bez tego będę musiał przerwać wszystkie prace, a projekt porzucić :/
Jeśli ktoś w pełni nie rozumie problemu (badziewnie opisuję) to proszę dopytać!
sad.gif
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.