Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] problem z include w class
Forum PHP.pl > Forum > Przedszkole
troian
Witam, mam problem z załadowaniem za pośrednictwem include_once pliku php, oto jak wygąda szkielet strony:



index.php wczytuje takie pliki: script.php, funcrion.php, lang.php, oto jak wygląda wczytywanie plików:

  1. if(file_exists('_script/function.php'))
  2. include_once '_script/function.php';
  3. else
  4. die("Error load file function.php!");


I jeżeli chodzi o komunikację między plikami function a script to nie ma problemu, jednak zabawa zaczyna się z dołączeniem pliku lang.php.

oto jak wygląda wczytanie pliku lang.php w index
  1. $lang = '_lang/'.lang().'/lang.php';
  2. if(file_exists($lang))
  3. include_once $lang;
  4. else
  5. die("Error load file lang.php!");


Funkcja lang()
  1. function lang()
  2. {
  3. if(!isset($_COOKIE['lang']))
  4. {
  5. setcookie('lang', 'pl-PL', time() + (86400 * 30), "/");
  6. return 'pl-PL';
  7. }else{
  8. $lang = $_COOKIE['lang'];
  9. return $lang;
  10. }
  11. }


w pliku script.php mam stworzoną klasę oraz wewnątrz tej klasy funkcję:
Kod
class web
{
    
    public function register()
    {    
        [...]
        $info = $error_1;
        [...]
    }
}


$error_1 ma być pobierane z lang.php, i tutaj jest problem bo jeżeli napiszę import lang.php w index.php
to na całej stronie mogę pobierać zmienne z pliku jednak w funkcji register nie mogę wyświetlić informacji,
zaź kiedy ustawie import pliku bezprośrednio w funkcji register to wtedy wczytuje ów zmienne ale muszę usunąć wtedy
import lang.php z indexu gdyż wszystko się gryzie, i tutaj pytanie mam jak napisać funkcje lang tak aby do wszystkich
plików w drzewie oraz do wszystkich klass importowała zawartość pliku lang.php

Bardzo pszepraszam jak nie czytalnie coś napisałem, nie umiem bardziej tego wyjaśnić smile.gif
bobek358
Przekaż zawartość pliku lang (domniemywam że to zwykła tablica) do konstruktora klasy web i przypisz ją do pola klasy. Będziesz mógł używać wewnątrz klasy.
troian
Cytat(bobek358 @ 19.08.2015, 11:46:39 ) *
Przekaż zawartość pliku lang (domniemywam że to zwykła tablica) do konstruktora klasy web i przypisz ją do pola klasy. Będziesz mógł używać wewnątrz klasy.


Jak zamienić to w tablice?
Kod
$registration_error_login_1 = 'Podany login jest zbyt długi!';
$registration_error_login_2 = 'Podany login jest zbyt krótki!';
$registration_error_pass_1 = 'Podane hasło jest zbyt długie!';
$registration_error_pass_2 = 'Podane hasło jest zbyt krótkie!';
$registration_error_pass_3 = 'Hasła nie są takie same!';
$registration_error_email_1 = 'Błędny adres e-mail!';
$registration_error_kup_1 = 'Błędny kod usuwania postaci!';
$registration_error_pin_1 = 'Błędny kod pin!';
id4
Próbowałeś zapisać w ten sposób?
  1. $lang = '_lang/'.(lang()).'/lang.php';
troian
Cytat(id4 @ 19.08.2015, 12:03:23 ) *
Próbowałeś zapisać w ten sposób?
  1. $lang = '_lang/'.(lang()).'/lang.php';


Nie wiem w czym to ma niby pomóc, ale dla świętego spokoju sprawdziłem. Nie działa niestety.
bobek358
Możesz zrobić np tak:
  1. $lang['registration_error_login_1'] = 'Podany login jest zbyt długi!';
  2. $lang['registration_error_login_2'] = 'Podany login jest zbyt krótki!';
  3. $lang['registration_error_pass_1'] = 'Podane hasło jest zbyt długie!';
  4. ...


i wtedy przekazujesz tablicę $lang do klasy.
Ogólnie, plik z językiem do statycznych elementów lepiej zrobić na tablicy, niż w osobnych zmiennych dla każdego elementu.
troian
Cytat(bobek358 @ 19.08.2015, 12:13:43 ) *
Możesz zrobić np tak:
  1. $lang['registration_error_login_1'] = 'Podany login jest zbyt długi!';
  2. $lang['registration_error_login_2'] = 'Podany login jest zbyt krótki!';
  3. $lang['registration_error_pass_1'] = 'Podane hasło jest zbyt długie!';
  4. ...


i wtedy przekazujesz tablicę $lang do klasy.
Ogólnie, plik z językiem do statycznych elementów lepiej zrobić na tablicy, niż w osobnych zmiennych dla każdego elementu.


Powiedz mi jeszcze tylko w jaki sposób mam załadować tablicę lang jedocześnie do klasy jak i do pojedynczych plików php, czy da się to jakoś przez index.php czy muszę do każdej klasy pisać include i do każdego pliku php ?
bobek358
W pliku index.php masz ją cały czas dostępną tylko nie odwołujesz się przez
  1. echo $registration_error_login_1;

tylko
  1. echo $lang['registration_error_login_1'];


A co do dostępności w klasie tworzysz pole $lang w klasie web i przy jej wywołaniu przekazujesz tablicę:

  1. $web = new web($lang);

i w klasie web masz konstruktor:
  1. public function __construct($lang)
  2. {
  3. $this->lang = $lang;
  4. }

i teraz odwołujesz się do tych języków wewnątrz klasy poprzez
  1. $this->lang['registration_error_login_1']
troian
Znalazłem nieco inne rozwiązanie problemu wink.gif zamiast importować lang do kalsy, wysyłam z klasy nazwę zmiennej w tabeli np $error_register[2] = 'error_2';

a w pliku index.php piszę:
$lang[$error_login[2]];

i wszystko działa wink.gif
viking
  1. $this->lang
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.