Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wykonanie kodu php pobranego z bazy.
Forum PHP.pl > Forum > PHP > Object-oriented programming
Szymciosek
Witam,
w bazie danych umieszczam takie rzeczy jak:

template:
Kod
<?php echo $title; ?>


content:
Kod
{"data":{"title":"<h1>Lorem ipsum - Home<\/h1>","content":"<p>Nullam eget luctus urna.<\/p>","test":"testowy wpis"}}


Łączę je w jedną całość, lokalnie to działało póki kod z template umieściłem bezpośrednio w pliku. Lecz przestaje działać, gdy ten sam kod chcę wkleić w to samo miejsce, ale pobrany z bazy.

Nie wiem czy jasno się wyraziłem...
sajegib
A może jeśli content jest stringiem zrobić eval(); ?
Szymciosek
No teoretycznie jest, dopiero później jest "rozkodowany".

Ale jak proponujesz jedno z drugim połączyć?

$title jest wysyłany do view i tam wyświetlany.
kayman
zapisać jako plik php i include? smile.gif
sajegib
Jak dobrze rozumiem to, co chcesz osiągnąć to:

wyslac template do view, a tam zrobić eval(tutaj_template);

wykona się kod z template i "wyEchuje" content
Szymciosek
Teoretycznie zaczyna coś działać, ale jak to ma się do sprawy bezpieczeństwa? Z tego co czytałem, to nie jest zalecane używanie eval().
CuteOne
Zacznijmy od tego, że nie jest zalecane trzymanie kodu php(czy templatu strony) w bazie... o evalu nie wspominając.

Od tego masz pliki szablonów/konfiguracyjne aby nie tworzyć dziur z premedytacją smile.gif
Szymciosek
To jakie inne rozwiązanie? Chcę zrobić dynamiczne widoki, aby nie tworzyć wielu plików z KONKRETNYM widokiem.

No chyba, że to właśnie tak ma działać? Że ja jako koder strony, tworzę widoki w plikach, a w bazie tylko JSON z treścią, którą pobieram i wrzucam w kolejne widoki? Więc użytkownik jako tako nie ma dostępu do wyglądu strony tylko do edycji jej treści?
CuteOne
1. Zastanów się czy JSON jest ci do czegoś szczególnie potrzebny (utrudnia edycję i zapis danych)
2. Czy jako koder, nie możesz stworzyć katalogu do przechowywania templatek użytkowników?
  1. templates
  2. |- users
  3. |- 1 (id użytkownika)
  4. |- templatka_1.tpl
  5. |- templatka_1_1.tpl (wersja 2 templatki 1)
  6. |- templatka_2.tpl
  7. |- 2

Dane o templatce lądują w bazie np. nazwa, opis itp
Szymciosek
Czy ja wiem czy tak bardzo utrudnia?
Załóżmy, że w home będę chciał mieć $title i $content, a w about $title, $content, $myName...

Więc Twój pomysł na bazie się chyba tutaj wyłoży, jeżeli jedna kolumna odpowiada jednej zmiennej.

Niedługo może już coś wrzucę do oceny i opiszę jak co zrobiłem.
!*!
Mam dziwne wrażenie że temat ten był już omawiany.

Stwórz klasę parser, w niej wykorzystaj extract i tyle. Tu nie ma wielkiej filozofii, bo php samo w sobie jest takim systemem.

  1. <?php
  2.  
  3. $tpl = new tpl::parse('file.html', array('title' => 'ble ble ble')); //array to tagi jakie chcesz aby były zamienione w szablonie
  4. echo $tpl->render();


plik file.html:
  1. <div><?php echo $title;?></div>


co zwróci ble ble ble, takie jak zadeklarowałeś wcześniej
Szymciosek
Takie coś mam zrobione, bardzo podobnie

  1. /**
  2.   * Initializes and sends properties to the template
  3.   *
  4.   * @param string $_template path to the template file
  5.   */
  6. public function display($_template)
  7. {
  8. $this->template = $_template;
  9.  
  10. /* Creates variables */
  11. if (!empty($this->vars))
  12. extract($this->vars);
  13.  
  14. include $this->template;
  15. $template = ob_get_contents();
  16.  
  17. return $template;
  18. }


no i samo dodawanie:
  1. $this->view->contentTitle = $this->contentsModel->getContentTitleBySlug($_slug);


Chodziło o wykonywanie kodu php z bazy, ale może w końcu inaczej zrobię. Będę owszem trzymał template cały w bazie, ale przy pobieraniu go z bazy będzie tworzony plik php z jego zawartością. Nie będzie to zawsze wykonywane tylko przy konkretnej zmianie na stronie.
!*!
I o to chodziło. Tylko nadal nie rozumiem po co Ci TPL w bazie?
Szymciosek
Na razie to jest na etapie tworzenia i taki był zamysł, ze template będę mógł edytować bezpośrednio w bazie, ale przecież jak zrobię stronkę, to już nie będzie wygląd zmieniany żeby klient miał potrzebę edytowania tego...
Jeszcze zmienię pewnie 100 różnych rzeczy w tym co robię.
!*!
Pliki html też można edytować, a podejście "klient nie będzie zmieniał tego" jest błędne ;)
Szymciosek
Trochę się zmieszałem, napisałem do kumpla, wg. niego w bazie jest lepiej, chociażby ze względu na tworzenie rewizji. W razie czego zawsze możemy wrócić do poprzedniego działającego pliku.

Wyobraź sobie sytuację, klient niech już ma dostęp do zmian w template, ale pozmienia coś, zapisze, zobaczy wynik i nie będzie mu się podobało, nie będzie umiał wrócić do poprzedniego, wchodzi w jakiś dział, wybiera poprzednią rewizję i przywraca sobie dane do bazy, generując przy tym plik na nowo.
CuteOne
  1. templates
  2. |- users
  3. |- 1 (id użytkownika)
  4. |- templatka_1.tpl
  5. |- templatka_1_1.tpl (wersja 2 templatki 1)
  6. |- 2

Zmiana nazwy pliku w bazie(tak jak w moim poprzednim poście) z templatka_1_1.tpl na templatka_1.tpl i masz rewizję. No i nie bawisz się w tworzenie statycznych plików na podstawie contentu z bazy (bo takowy już istnieje) wink.gif
Szymciosek
No dobra - w czym pliki są lepsze od bazy danych?
zegarek84
Cytat(Szymciosek @ 7.05.2013, 13:35:28 ) *
Trochę się zmieszałem, napisałem do kumpla, wg. niego w bazie jest lepiej, chociażby ze względu na tworzenie rewizji. W razie czego zawsze możemy wrócić do poprzedniego działającego pliku.

Wyobraź sobie sytuację, klient niech już ma dostęp do zmian w template, ale pozmienia coś, zapisze, zobaczy wynik i nie będzie mu się podobało, nie będzie umiał wrócić do poprzedniego, wchodzi w jakiś dział, wybiera poprzednią rewizję i przywraca sobie dane do bazy, generując przy tym plik na nowo.

ja tutaj popieram to co sugeruje CuteOne... do tematu najlepiej podejdź pod podobnym kontem jak do przechowywania obrazków... do większego zarządzania i tak informacje musisz przechowywać w bazie, jednak same obrazki najlepiej przechowywać w odpowiednio przemyślanej strukturze katalogów w plikach... co do obrazków np. masz rozbudowany system avatar'ow - klient ma dostęp do historii avatarów i ma jeszcze np. jakąś biblioteczkę avatarów którą sobie sam wgrał, do wszystkiego ma dostęp - czy to nie przypomina rewizji... a mając to w plikach jako template polecam nie wymyślać cudów na kiju tylko podejście najprostsze czyli php (jak w zendzie) i w odpowiedniej funkcji/klasie masz obudowany include przez ob_start, ob_get_contents i ob_clean_end...

// edit
lub jakiś system template tłumaczący całość do php by nie było narzutu...

...
btw. taki oftopick gdyż muszę z siebie "powietrze" upuścić (może ktoś połączy się ze mną w bólu o.O), wróciłem znowu do sportu mt z lekką kontuzją po innym i lekkim niedowładem ręki po kończącym się zapaleniu to takie dziś miałem szczęście, że mimo iż miałem suspensor to ledwo chodzę o.O (śmieję się, "dobrze, że mam już córkę ;p")
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.