Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Code Igniter] Zmienne wnętrze strony
Forum PHP.pl > Forum > PHP > Frameworki
Tomplus
Czytałem kurs Rikk'a ale nic ciekawego tam nie znalazłem.
Dla mnie przykłady nie są dobre, za bardzo są ukierunkowane na jedną rzecz.

Jeszcze znalzłem kurs Groadina, ale tam też nie mogę znaleźć tego co potrzebuje.

Z PHP5 u mnie nie najlepiej ale próbuje się dokształcać.

(ciąg dalszy w drugiej mojej odpowiedzi)
kwiateusz
zrób tak jak ktoś na tym forum że parsowanie szablonu daj w destruktorze klasy i będzie za każdym razem ten sam szablon
Tomplus
nadal nie rozumie, ale dobra ...

zadam pytanie inaczej.

przedstawiam fragment kontrolera CI

Styl jest w layout, ale nie w tym rzecz.
  1. <?php
  2. function index()
  3.  {
  4. $content['main'] = $this->load->view('pl', array(), true);
  5. $this->load->view('layout', $content);
  6.  }
  7.  
  8. function stronka()
  9. {
  10. $content['main'] = $this->load->view('stronka', array(), true);
  11. $this->load->view('layout', $content);
  12. }
  13. ?>


w tej postaci adres mi wygląda w ten sposób
www.strona.pl/pl/
a kolejna
www.strona.pl/pl/stronka/

niby dobrze niby fajnie, ale coś mi tu nie pasuje.

za każdym razem kiedy dodaje nową stronę to musiałbym edytować ten kontroler i dodawać funkcje.
Jest to nie wygodne.

Więc pytanie:
Jak zrobić aby za każdym razem wpisując za /stronka/ inną nazwę pliku który jest w tym samym katalogu się wyświetlał ?
kwiateusz
ale wpisując cokolwiek po stronka to nie odpali innej metody kontrolera, bądź innego kontrolera tylko metode stronka a reszta to będą parametry dostepne przez uri...
Tomplus
tak, zgadza się. Ja to wiem.

tylko chce własnie rozwiązanie takie ze jak wpisze cokolwiek co istnieje pod /stronka to się wyswietli

co zrobić aby ta 'stronka' stala sie parametrem i jak go odczytac, aby mozna bylo go zastosowac w kontrolerze ?
Łukasz O.
zapoznaj się z przewodnikiem CI i poszukaj co to routing - to powinno rozwiązać Twoje problemy
nrm
jakbys się prościej wysławiał to może dało by się coś zrobić, a tak ciężko zrozumiec o co ci w ogóle chodzi.

www.strona.pl/pl/stronka

$stronka = $this->uri->segment(2);

poza tym: routing + dynamiczne generowanie tej zawartosci.
Tomplus
Okej, to powiem jeszcze raz.

w CI jest coś takiego jak
Controller oraz Views

żeby pokazać stronkę w postaci adresu www.strona.pl/pl/stronka

trzeba w C dodac plik pl.php a w nim
funkcja stronka() oraz

zadając pytanie.
Jak mam zrobić aby 'stronka' była zmienną.

aby działała taka funkcja
  1. <?php
  2. function index($show='stronka0')
  3. {
  4. $this->load->view($show);
  5. }
  6. ?>
Łukasz O.
czytałeś user_guide'a od CodeIgniter'a? bo coś mi się widzi, że albo nie, albo nie znasz dobrze angielskiego, bo tam wszystko pięknie opisane jest

normalnie: www.mojastrona.pl/klasa/funkcja/zmienna
ustawiasz: $route['cos/zmienna']='klasa/funkcja';
wynik: www.mojastrona.pl/cos/zmienna powoduje wywołanie klasy "klasa", w niej funkcji "funkcja" z parametrem "zmienna"

analogicznie u ciebie:
normalnie: www.mojastrona.pl/pl/stronka
ustawiasz: $route['pl/:any']='pl/index';
wynik: www.mojastrona.pl/pl/tescik spowoduje wywołanie klasy "pl", w niej funkcji "index" z parametrem "tescik"
  1. <?php
  2. function index($show='stronka0'){//domyślna strona przy wywołaniu www.mojastrona.pl/pl/
  3. $this->load->view($show);//tutaj wywoła to co podasz w parametrze
  4. }
  5. ?>
nie da się tego prościej wytłumaczyć tongue.gif mam nadzieję, że to Ci w końcu pomoże
Tomplus
plik routes.php
  1. <?php
  2. $route['default_controller'] = "pl";
  3. $route['pl/:any']='pl/index';
  4. ?>


plik /controller/pl.php
  1. <?php
  2. class Pl extends Controller
  3. {
  4. function index($show='start')
  5.  {
  6. $content['main'] = $this->load->view($show, array(), true);
  7. $this->load->view('layout', $content);
  8.  }
  9. ?>


gdzie layout to plik w Views z szablonem.

gdy wpisuje www.strona.pl/pl/cokolwiekcoistniejewviews
i nie mam błąd 404 i odpowiedź strona cokolwiekcoistniejewviews.php nie isnieje


Czy czytałem dokumentacje ?
i tak, i nie. - nie wszystko co tam pisze potrafię zastosować, albo logicznie wyciągnąć z nich jakiś wniosków.
Łukasz O.
nie istnieje, bo go nie masz - to Twój nowy widok - stwórz ten plik i zobacz czy działa

a działa na pewno - teraz nie musisz edytować kontrolera - po prostu dla każdej nowej stronki tworzysz nowy widok - przecież o to Ci właśnie chodziło, prawda?
Tomplus
Tak, tworze widoki,
w katalogu views mam kilka plików które powinien wyświetlić

jeżeli nadal będę stosował
  1. <?php
  2. function test($show='strona') {
  3. $content['main'] = $this->load->view($show, array(), true);
  4. $this->load->view('layout', $content);
  5. }
  6. ?>

działa wszystko
www.strona.pl/pl/test/
www.strona.pl/pl/test/strona
a nawet
www.strona.pl/pl/test/stroneczka

Tak mi się zdaje że ten routing.php nie działa.


  1. <?php
  2. function index()
  3.  {
  4.  
  5. $show = $this->uri->segment(2, 'strona');
  6. $content['main'] = $this->load->view($show, array(), true);
  7. $this->load->view('layout', $content);
  8.  }
  9. ?>


spróbowałem nawet zastosowac segmentacje, ale też nic.

Są jeszcze jakieś sztuczki ?
Łukasz O.
route działa - podałem Ci dokładnie to samo rozwiązanie jakie miałem na stronie kumpla - Twój problem musi być w innym miejscu, albo nadal nie możemy się dokładnie zrozumieć
Tomplus
ja nie mam pojęcia, ja to rozwiązać.

do tej pory modyfikowowałem tylko pliki w /controller/ /views/ oraz config.php oraz dzięki tobie routing.php

z wyjątkiem configu podałem wszystkie kody na tej stronie.


--------------------------------------------
W user_guide wyczytałem cos w stylu tego:

plik controllers/test.php
  1. <?php
  2. class Test extends Controller
  3. {
  4. function index($show="start")
  5.  {
  6. echo 'show: '.$show;
  7.  }
  8.  
  9. }
  10. ?>


plik routing.php
  1. <?php
  2. $route['test/:any'] = 'test/$1';
  3. ?>


Teraz wyniki doswiadczenia:
www.strona.pl/test/ -> show: start
www.strona.pl/test/cos -> show: $1 a według pomocy powinno być show: cos

Więc Routers działa, ale dlaczego nie działają Wyrażenia ?
Łukasz O.
":any" jest wbudowane w CI - żeby działały wyrażenia musisz je poprawnie zapisać, czyli w Twoim przypadku

$route['test/([a-z0-9]+)']="test/$1";

używając $route['test/:any']='test/$1'; tak naprawdę używasz samego 'test/', bo pod $1 nic nie masz - jak widzisz route w CI działa jak najbardziej poprawnie smile.gif
Tomplus
tak, dziękuje za pomoc.

Jednak musiałem jeszcze coś sam wymyślić.

Bo to że zadziało to jedno, a to żeby działo tak jak trzeba to drugie.

Defacto musiałem usunąć wpis w $route['default_controller'] i dopiero zadziało wszytsko tak jak ja oczekiwałem na samym początku tego wątku.


Jeszcze raz dziękuje.
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.