Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Funkcja
Forum PHP.pl > Forum > Przedszkole
materkamil
Mam taką funkcję kasującą polskie znaki:

  1. function clean($x) {
  2. $PL = array('ą' => 'a', 'ę' => 'e', 'ś' => 's', 'ć' => 'c', 'ó' => 'o', 'ń' => 'n', 'ż' => 'z', 'ź' => 'z', 'ł' => 'l', 'Ą' => 'A', 'Ę' => 'E', 'Ś' => 'S', 'Ć' => 'C', 'Ó' => 'O', 'Ń' => 'N', 'Ż' => 'Z', 'Ź' => 'Z', 'Ł' => 'L');
  3. return(str_replace(array_keys($PL), array_values($PL), $x));
  4. }


i teraz drugą funkcję wyświetlającą rekordy z bazy w postaci listy:

  1. function menu() {
  2. global $database;
  3. $db_menu = $database->query('SELECT * FROM menu');
  4. foreach($db_menu as $menu) {
  5.  
  6. echo('<li><a href=index.php?page='.clean('ŚÓŚ').'>text</a></li>');
  7. }
  8. }


Gdy wpisany jest do drugiej funkcji tekst np: "ŚÓŚ" link prowadzi do ...SOS (bez polskich znaków)

Jeśli jednak zamiast tekstu dam tu zmienną:

  1. echo('<li><a href=index.php?page='.clean($menu['cos']).'>text</a></li>');


To adres jest dalej z polskimi znakami (np: gdy wartosc zmiennej $menu['cos'] to "ŚÓŚ"). Jak to możliwe i jak temu zapobiec?
Jinbe
Cytat(materkamil @ 26.09.2012, 11:12:18 ) *
Jak to możliwe i jak temu zapobiec?

Upewnij się, że tekst pobierany z bazy danych jest zapisany w tym samym kodowaniu, co w Twojej tablicy $PL.
peter13135
Cytat(Natanek @ dawno temu ) *
Jeśli Twoje dziecko używa globalsów, to wiedz, że coś się dzieje.

materkamil
Znalazłem rozwiązanie, po prostu zrobię całkiem odwrotnie -> zamiast pobierać dane z bazy i je czyścić stworzę nową kolumnę w tabeli gdzie będę dodawał już wyczyszczone dane.

Co do tego mojego projektu CMS - będzie się "to coś" składało się z 3 niezależnie działających części:
- Mechanizm główny
- Pakiety
- Szablony

Mechanizm główny zarządzał będzie działaniem całym systemem, wszystkimi opcjami, funkcjami tego CMSa.

Pakiety będą to poszczególne moduły CMSa takie jak np: komentarze, newsy, obsługa bazy danych, itp.

Sablony będą całkowicie oddzielone od kodu PHP. Będą to po prostu zwykłe struktury w HTMLu a w miejscach gdzie miałby być kod PHP użyte są funkcje.

Na pewno będzie to lepsze od ostatniego skryptu CMSa który nie był CMSem tylko stroną z panelem administracyjnym
!*!
Od tego typu zmian jest iconv a nie jakieś śmieszne tablice.

Cytat
Sablony będą całkowicie oddzielone od kodu PHP. Będą to po prostu zwykłe struktury w HTMLu a w miejscach gdzie miałby być kod PHP użyte są funkcje.


To po co Ci taki szablon? Szablony powstały po to, aby ustalać znaczniki {text} zamienia na <?php echo $text;?> a nie po to aby były w nich funkcje. A jak już chcesz stosować MVC, to nie powinny być to funkcje a kod PHP. Sprowadzasz wszytko do jednego worka.
materkamil
W ostatnim projekcie wszystko było pomieszane w jedno, wrzucone do indexa. Tutaj to wszystko rozdzieliłem. Np tak wygląda jeden z szablonów (oczywiście dopiero 1/3 tego szablonu jest gotowe):

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title><?php scms_title(); ?></title>
  5. <link rel="stylesheet" type="text/css" href="themes/<?php echo(scms_theme()); ?>/style.css">
  6. </head>
  7. <body>
  8. <div id="header"><?php scms_header(); ?></div>
  9. <ul id="menu"><?php scms_menu(); ?></ul>
  10. <div id="under">
  11. <div id="left1"></div>
  12. <div id="right1"></div>
  13. </div>
  14. <div id="content">
  15. <div id="left2"><?php scms_content(); ?></div>
  16. </div>
  17. <div id="footer"></div>
  18. </body>
  19. </html>


Dzięki temu gdy chce zmienić wygląd - edytuje kod HTML i CSS, i nie mieszam się nic w kod PHP oraz gdy zmieniam PHP nie ingeruje w wygląd. Index.php wygląda mniej więcej tak (również nie gotowe):

  1. define('READ_INDEX',1);
  2.  
  3. include_once('packages/mysql.php');
  4. $db_packages = $database->query('SELECT * FROM packages');
  5.  
  6. include_once('function.php');
  7.  
  8. foreach($db_packages as $packages) {
  9. include_once('packages/'.mysql_real_escape_string($packages['name']).'.php');
  10. define($packages['name'],1);
  11. }
  12.  
  13. /** Theme */
  14.  
  15. include_once('/themes/'.scms_theme().'/index.php');


Po prostu gdy przykładowo na stronie głównej chcemy newsy - mamy newsy. Ale gdy chcemy na stronę główną dać księgę gości, zwykłą strone - nie ma problemu - od wszystkiego są pakiety
!*!
Widzę że załapałeś, ale chyba trochę na opak. Po co Ci funkcja? Skoro to samo może robić zmienna? Czytałeś o MVC{P}? Model obrabia/odczytuje dane, a nie widok, widok może je tylko przemielić np. w pętli gdy pobierze tablice z listą menu z modelu.

Poza tym, upewnij się czy include_once jest wskazane.
materkamil
Include_once jest oczywiście wskazane, przy dołączaniu funkcji czy klas (? chyba) w obiektowym. Jako że w wielu plikach znajdują się schematy funkcji lepiej jest użyć tego _once (przynajmniej wg. mnie)

Co do funkcji, po prostu dużo pracowałem z obróbką szablonów wordpressa i coś takiego zauważyłem, przemyślałem to i pomyślałem że to bardzo dobry pomysł. Słyszałem również, że do tego celu wykorzystujemy zwykle Smarty, jednak - zdecydowałem się na funkcje.

Cytat
Widzę że załapałeś, ale chyba trochę na opak.


Od początku mówiłem że nowy CMS będzie przełomem we wszystkich moich projektach
!*!
_once przy klasach (najlepiej require), przy czymś innym już nie, bo kto powiedział że to zawsze musi być to samo i wyświetlane tylko raz.
Nie wzoruj się na WP, bo jego kod jest fatalny i przestarzały.
Masz w widoku funkcje, tylko co jak będziesz chciał coś zmienić, to zmieniasz kod funkcji? Ok, tylko czym to jest? Jeszcze widokiem czy już modelem? W przeciętnym projekcie masz +/-- 60 funkcji/zmiennych. Jaki jest % zużycia ramu w przypadku inicjalizacji funkcji a zmiennej? wink.gif weź pod uwagę fakt że Twoje funkcje muszą wykonywać jakieś operacje, każdorazowe ich wywołanie wykona to samo X razy.

Cytat
Od początku mówiłem że nowy CMS będzie przełomem we wszystkich moich projektach

Przełom jest wtedy gdy pojmujesz wiedzę jaką posiadasz.
materkamil
Cytat
Nie wzoruj się na WP, bo jego kod jest fatalny i przestarzały.


ciekawe...

Zobaczymy co z tego wyniknie z tego CMSa. Wiem jak dużo pracy zostało do ukończenia go. Ogólne działanie widoczne jest tutaj:
http://94.251.191.53/scms/
http://94.251.191.53/scms/admin

Na razie przygotowany jest silnik CMSa. Nie należy się wzorować na wyglądzie bo jak już mówiłem od tego są szablony
Damonsson
Ja tam się nie znam, ale czy przypadkiem, przetwarzanie formularza nie powinno być w osobnym pliku? Jeśli stosujesz MVC.
A logując się jako admin w formularzu nie widzę: action=""
!*!
Cytat(Damonsson @ 26.09.2012, 15:36:35 ) *
Ja tam się nie znam, ale czy przypadkiem, przetwarzanie formularza nie powinno być w osobnym pliku? Jeśli stosujesz MVC.
A logując się jako admin w formularzu nie widzę: action=""


Nie musi, za to odpowiada kontroler. Ale nie oszukujmy się, tutaj nie ma MVC. materkamil wymyślił "coś", co w założeniu ma pełnić rolę systemu szablonów, ale nie bardzo ma to związek z logicznym rozdzieleniem kodu od prezentacji. Choć może poczekajmy na efekt końcowy.
materkamil
Co do formularza i action="" - nie ma tutaj czegoś takiego chociaż panel administracyjny znajduje się w innym pliku (administration.php). Tutaj najprościej mówiąc wykorzystane są sesje
Niktoś
Cytat
Ja tam się nie znam, ale czy przypadkiem, przetwarzanie formularza nie powinno być w osobnym pliku?

Czytając wątek też o tym pomyślałem.Materkamil-to co próbujesz osiągnąć nie można nazwać w pełni programowaniem obiektowym-nie wystarczy używać funkcji, aby tak było. W PHP za bardzo może tego nie widać za to w .NET już tak- zasugerowałbym używania klas, aby odizolować kod php od html.Rozbudowujesz klasy pozostawiając kod html w spokoju jak i odwrotnie.Poczytaj o klasach i ich odmianach, korzystaj z wzorców projektowych, może wtedy będzie to zasługiwało na miano projektu robionego obiektowo.
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.