![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam (IMG:style_emoticons/default/smile.gif)
Od razu przejdę do rzeczy. Buduję stronę internetową. Dla przykładu załóżmy, że mam następujące podstrony: Kod http://www.moja-strona.pl/users/jan.kowalski http://www.moja-strona.pl/projekty/hello.word http://www.moja-strona.pl/about Dla każdej podstrony tworzę osoby plik, który ją (tj. stronę) generuje: Kod dipslay_users.php dipslay_projects.php about.php O co mi chodzi? Chciałbym móc zrobić coś takiego:
Mówiąc krótko - wszystkie strony mają "przechodzić" przez jeden plik oraz zmiennych użytych w pliku index.php chciałbym móc używać w pozostałych plikach. Czy muszę do tego użyć global, tzn. czy to muszę być zmienne globalne? Czy może ma ktoś inny pomysł? Inną koncepcję? (IMG:style_emoticons/default/smile.gif) Używam silniczka szablonów (RainTPL) (gdyby komuś ta informacja była potrzebna). |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 12 Dołączył: 23.11.2006 Skąd: WL Ostrzeżenie: (0%) ![]() ![]() |
Cytat zmiennych użytych w pliku index.php chciałbym móc używać w pozostałych plikach Tego nie rozumiem... Skoro masz pętle switch i w danym momencie przeglądasz userów, czyli includujesz display_users... To po co ci używać tych zmiennych na podstronie about jak jej nie parsujesz(przeglądasz)? Jeśli ktoś przełączy na about to index zacznie się parsować od początku i "będziesz mógł używać zmiennych z indexu". ... A jeśli chcesz używać ich w plikach które nie przechodzą przez index to jest to bezsensu i nie do wykonania (bo index nie jest parsowany)(ale o to pewnie ci nie chodzi) Ogólnie najlepszym przykładem dla ciebie będzie CMS PHP FUSION i plik maincore.php... zobacz sobie jak to jest tam rozwiązane i jaką role ten plik odgrywa... Pozdrawiam i mam nadzieje że o to ci chodziło... bo nie zrozumiałem do końca Ten post edytował szmerak 2.01.2012, 21:34:18 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za zainteresowanie moim problemem - już tłumaczę (IMG:style_emoticons/default/smile.gif)
Cytat Skoro masz pętle switch i w danym momencie przeglądasz userów, czyli includujesz display_users... To po co ci używać tych zmiennych na podstronie about? Głównie chodzi o to, aby zaoszczędzić sobie pisania w każdym pliku tego samego fragmentu kodu. Na przykład sesja. Obiekt reprezentujący sesję chciałbym utworzyć/powołać do życia tylko raz (w pliku index.php):
Utworzyć tylko raz, ale posługiwać się nim chciałbym np. w pliku display_users.php
Powiedzmy, że część profilu użytkownika jest dostępna tylko dla zalogowanych - wtedy będzie mi potrzebna sesja w pliku display_users.php (IMG:style_emoticons/default/smile.gif) Cytat A jeśli chcesz używać ich w plikach które nie przechodzą przez index(...) Nie no - to jest nie logiczne i bezsensu (IMG:style_emoticons/default/smile.gif) Tak robić NIE chcę (IMG:style_emoticons/default/smile.gif) Cytat Ogólnie najlepszym przykładem dla ciebie będzie CMS PHP FUSION(...) Przeglądałem PHPBB - tam wszędzie używają global, ale luknę do PHP FUSION (IMG:style_emoticons/default/smile.gif) Mam nadzieję, że rozjaśniłem trochę (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 12 Dołączył: 23.11.2006 Skąd: WL Ostrzeżenie: (0%) ![]() ![]() |
Hmm, Ja tylko nie rozumiem czy ktoś jeszcze?
Skoro powołujesz do życia obiekt Session() w pliku index a później includujesz display_users.php do tego samego pliku, to w czym problem? Zoobrazuje ci to
no i żadne global nie jest tutaj potrzebne... Ten post edytował szmerak 2.01.2012, 22:18:14 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
No jak na złość - kiedy chciałem zrobić malutki test padł mi XAMPP (IMG:style_emoticons/default/tongue.gif) Musiałem zainstalować go ponownie (IMG:style_emoticons/default/tongue.gif) No, ale przynajmniej teraz mam aktualną wersję (IMG:style_emoticons/default/smile.gif)
Wracając do tematu - Twój kod działa - o coś takiego mi chodzi (IMG:style_emoticons/default/smile.gif) Przyznam się bez bicia, że testowałem ten sposób kiedyś jednak z negatywnym rezultatem. Zapewne coś schrzaniłem (IMG:style_emoticons/default/smile.gif) Pytanie tylko teraz - czy takie rozwiązania się stosuje? Czy są one praktykowane? Zastanawiam się też - include_once, czy require_once? Wiem, że jedna funkcja wypluwa warning, a druga fatal error. Czy jest jeszcze coś o czym powinienem wiedzieć stosując te funkcje przy takim rozwiązaniu? (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 12 Dołączył: 23.11.2006 Skąd: WL Ostrzeżenie: (0%) ![]() ![]() |
Pytanie tylko teraz - czy takie rozwiązania się stosuje? Czy są one praktykowane? Podałem ci przykład pliku PHP Fusion z maincore.php, który jest includowany na samej górze prawie każdego pliku w tym CMSie, zawiera on szereg funkcji które są najczęściej używane... ale przed funkcjami są sprawdzane i ustawiane "w przypadku FUSIONA" stałe... (czy użytkownik zalogowany, konfiguracje itp...), includowane pliki itd.. <- (Tak jak ty chciałeś) W taki oto sposób wszystkie najważniejsze zmienne są dostępne prawie w każdym pliku... Tak więc jak najbardziej jest to praktykowane, potwierdza to np Fusion... Cytat Zastanawiam się też - include_once, czy require_once? Wiem, że jedna funkcja wypluwa warning, a druga fatal error. Jak zapewne wiesz są 4 rodzaje funkcji dołączających(includujących). include, include_once, require, require_once. include a require różni się tym że w przypadku nie znalezienia pliku, include wypluwa błąd ale skrypt jest wykonywany do końca. Jeśli chodzi o require to parser wypluwa błąd i skrypt zostaje przerwany w miejscu błędu.(Wolałem to napisać dla późniejszych niejasności) no i jeszcze jest _once wsumie jak sama nazwa wskazuje "once -> raz" czyli w tłumaczeniu "dołącz ale tylko raz" to znaczy że jeśli plik już był dołączony to funkcja z "_once" jest pomijana. A teraz require czy include? Powiem ci to na moim przykładzie. Wszystkie pliki z niezbędnymi funkcjami, konfiguracją, klasami(np. mysql) bez których strona nie może działać, require. Mniej ważne pliki includuje. Czyli takie które nie wpłyną tak bardzo na stronę jak brak połączenia MySQL czy inne... Cytat Czy jest jeszcze coś o czym powinienem wiedzieć stosując te funkcje przy takim rozwiązaniu? Tak, ponieważ funkcja include jeśli nie umiejętnie się nią posługujesz ciągnie za sobą pewne zagrożenia typu. File inclusion... Ale ja nie znam się na tym zabardzo dlatego prosił bym kogoś bardziej wtajemniczonego o wypowiedzenie się w tym temacie. Pozdrawiam! Ten post edytował szmerak 3.01.2012, 02:21:46 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Przeglądałem PHPBB - tam wszędzie używają global, ale luknę do PHP FUSION (IMG:style_emoticons/default/smile.gif) Tam też wszędzie używają global - normalna praktyka w przypadku średnich lotów cmsów proceduralnych. Żeby nie używać globala musiałbyś za każdym razem przekazywać zmienną jako argument. Jak w przypadku jednej funkcji może wyglądać to nie za ciekawie, tak w przypadku obiektów, wygląda to znacznie lepiej. Odnośnie include czy require, IMO tylko require. Wolę żeby aplikacja przestała działać, niż ma działać z jakimiś błędami (brak szablonu itp). |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 12 Dołączył: 23.11.2006 Skąd: WL Ostrzeżenie: (0%) ![]() ![]() |
@by_ikar
tylko że mi się wydaję że chodziło mu o takie coś
Pozdrawiam (IMG:style_emoticons/default/wink.gif) A co do includa i requira -> czy nie lepiej na jakiegoś trackera który pracuje w tle ale jest dołączany na początku użyć include? ponieważ w przypadku błędu cała strona padnie, a używając includa, my stracimy troche statów, ale użytkownicy tego nie odczują. Ten post edytował szmerak 3.01.2012, 16:22:28 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat A co do includa i requira -> czy nie lepiej na jakiegoś trackera który pracuje w tle ale jest dołączany na początku użyć include? ponieważ w przypadku błędu cała strona padnie, a używając includa, my stracimy troche statów, ale użytkownicy tego nie odczują. To że coś się nie wczytało z plików php, jest raczej sytuacją wyjątkową, która miejsca mieć nie powinna. Czyli przerwanie działania skryptu i stosowna informacja dla admina + logi. A co jeżeli operowałeś na danych które dostarczał nie zaincludowany plik? Jest błąd, nawet jeżeli to jest notice, to skrypt IMO powinien zostać przerwany i zapisać do logów stosowną informację. Nie pamiętam kiedy ostatni raz użyłem include i bardzo dobrze mi z tym. Przynajmniej mam kontrolę nad aplikacją, a nie że ona robi sobie co chce (IMG:style_emoticons/default/wink.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 22.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję bardzo za odpowiedzi - teraz wszystko jest jasne i przejrzyste (IMG:style_emoticons/default/smile.gif)
Pozdrawiam! (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
A może skoro i tak potrzebujesz zadania które osiągasz dzięki dowolnym frameworkom MVC zainteresujesz się jakimś? Kohana, Yii, Zend Framework. Bo z tego co widać po kodzie zaczynasz powoli zmierzać w tym kierunku.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 18.09.2025 - 17:25 |