Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Rekomendowane odpowiedzi

Opublikowano

Teoretycznie korzystanie z surowego PHP w szablonach nie jest trudne, ale jest parę elementów o których trzeba pamiętać.

Składnia jest bardzo prosta i intuicyjna:

<php>

Kod PHP

</php>

Pomiędzy tagami <php> może być każdy kod z wyjątkiem funkcji bezpośrednio wyświetlających dane (takich jak echo, print, var_dump (bez warunku zwracania poprzez return) itp).

 

Zasada jest prosta: zamiast używać przykładowo echo do wyświetlenia zawartości jakiejś zmiennej, wklejamy ją bezpośrednio do szablonu (już nie pomiędzy tagami <php>) otaczając ją nawiasami klamrowymi ({$zmienna}).

Przykład zły:

<php>

$fruit = array('lemon', 'apple', 'orange');

print_r($fruit);

</php>

Wygeneruje błąd.

 

Przykład dobry:

<php>
$fruit = array('lemon', 'apple', 'orange');

$result = print_r($fruit, true);

</php>

{$result}

Wyświetli

Array ( [0] => lemon [1] => apple [2] => orange )

Drugi argument w funkcji print_r to alternatywny return, czyli funkcja nie wyświetla od razu danych, tylko je zwraca.

 

Kolejny przykład zły:

<php>

$variable = 'Hello ize!';

echo $variable;

</php>

BŁĄD!

 

Poprawnie:

<php>

$variable = 'Hello ize!';

</php>

{$variable}

Ważne!
Jeżli będziemy chcieli wyświetlić jakiś element tablicy w zmiennej NIE używamy do tego podwójnego cudzysłowa. Tylko pojedynczy.
Przykład zły:


<php>

$array = array(

    'ize1' => 'val1',

    'ize2' => 'val2',

    'ize3' => 'val3'

);

</php>

{$array["ize1"]}

Przykład dobry:

<php>

$array = array(

    'ize1' => 'val1',

    'ize2' => 'val2',

    'ize3' => 'val3'

);

</php>

{$array['ize1']}

Nie dotyczy elementów pomiędzy tagami <php>.

 

Jak wyświetlić dane z funkcji czy obiektu?

Przykładowo mamy stworzony plik testowy.php* w głównym katalogu forum.
Zawartość w nim to:

<?php

function invisionize()

{

    echo 'Hello ize!';

}

*Pamiętaj! Pliki wczytywane do szablonu muszą być z kodowaniem UTF-8 bez BOM

 

Próbując wyświetlić "Hello ize!" na forum, dodając do szablonu taki kod:

<php>

require_once DOC_IPS_ROOT_PATH . 'testowy.php';

invisionize();

</php>

Pojawi się błąd.

 

Aby poprawnie wyświetlić jej zawartość trzeba w pliku testowy.php i funkcji invisionize() zamienić echo na return:

<?php

function invisionize()

{

    return 'Hello ize!';

}

Następnie w szablonach:

<php>

require_once DOC_IPS_ROOT_PATH . 'testowy.php';

$ize = invisionize();

</php>

{$ize}

Taki kod poprawnie wyświetli "Hello ize!".

 

Jak wygląda sprawa z OOP?
Podobnie.

Plik ten sam co wcześniej, testowy.php, tym razem zawartość jego:

<?php

class ize

{

    public function test(){

        echo 'Hello ize!';

    }

}

Ten sam problem co wcześniej, echo... BŁĄD!

 

Zamieniamy echo na return:

<?php

class ize

{

    public function test(){

        return 'Hello ize!';

    }

}

I w szablonach:

<php>

require_once DOC_IPS_ROOT_PATH . 'testowy.php';

$f = new ize;

</php>

{$f->test()}

Lub, gdy zawartość do wyświetlenia jest w konstruktorze:

<?php

class ize

{

    public function __construct(){

        return 'Hello ize!';

    }

}

Szablony:

<php>

require_once DOC_IPS_ROOT_PATH . 'testowy.php';

$f = new ize;

</php>

{$f}

Powita nas "Hello ize!" :)

 

Czy pomiędzy tagami działają elementy IPB?

Nie sprawdzałem tego dogłębnie, ale raczej TAK.
Przykładowo definicja z pliku initdata.php

<php>

$df = CP_DIRECTORY;

</php>

{$df}

Poprawnie wyświetli nazwę naszego folderu admina.

 

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.