Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jakie proponujecie rozwiązanie
acztery
post
Post #1





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


hej,

Mam taki kłopot mam pewien serwis. Klient zażyczył sobie takiej funkcjonalność

W serwisie jest słownik gdzie jest np 1000 haseł.

Na którejś z podstron serwisu mamy jakiś tam tekst i chce aby słowa w tego tekstu odsyłały do słownika. np w tekscie mamy słowo modelowanie to po klikniecu przejdziemy do słownika i hasła modelowanie.

Tylko jest małe alee.

tresc na stronie wyśwetlam w smarty za pomoca foreach i tak musi zostać...? moze jakies sugestie ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
domis86
post
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


musi to na rusi smile.gif

smarty to shit

ale jak juz uzywasz, to tą tresc przekazujesz skądś do tych smartow, wiec prepusc ją wczesnie przez jakiś filtr ktory pododaje linki do tresci i dopiero wyslij do smartow.

Ale takie filtrowanie za pomoca slownika z bazy bedzie wolne, wiec lepiej chyba zapisac tresc w bazie z linkami od razu, albo jakoś cachowac te tresci.

Ten post edytował domis86 27.09.2007, 17:47:49
Go to the top of the page
+Quote Post
acztery
post
Post #3





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


smarty dobre czy złe każdy ma swoje zdanie i niech tak zostanie. filtrowanie przed dodaniem lub przed wysłaniem do smarty nie wchodzi w grę w serwisie ok 1000 podstron i tyle samo haseł myślałem zeby napisać poszperać w samej smarty. ale nie wiem ..
Go to the top of the page
+Quote Post
domis86
post
Post #4





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Cytat(acztery @ 27.09.2007, 19:19:56 ) *
smarty dobre czy złe każdy ma swoje zdanie i niech tak zostanie. filtrowanie przed dodaniem lub przed wysłaniem do smarty nie wchodzi w grę w serwisie ok 1000 podstron i tyle samo haseł myślałem zeby napisać poszperać w samej smarty. ale nie wiem ..


w smarty bedziesz filtrowal? czemu nie wchodzi w gre przed wyslaniem? wchodzi, i to jest jedyne wyjscie.
Go to the top of the page
+Quote Post
acztery
post
Post #5





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


bo edytowanie plików mi zajmnie tydzien. jedyne to to żę Bóg istnieje. Mysle ze tak będa filtorował to w samej klasie smarty. nie zaglądałem do źródła ale może zmienie cos z metodą związana z foreach. wtedy zmienia w 1 miejscu i zmiany sa automatycznie wszędzie widziane.
Go to the top of the page
+Quote Post
domis86
post
Post #6





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


lol, kombinujesz jak kon pod gore. Nie uda ci sie przerbionie smartow, jesli nawet porzadnie systemu nie umiesz zaprojektowac.
Zrob lepiej jakąś funkjce(albo klase) ktora bedzie uruchamiana na wszystkich danych zanim pojda do smartów.
Go to the top of the page
+Quote Post
qqrq
post
Post #7





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(domis86 @ 27.09.2007, 18:47:15 ) *
smarty to shit


Sam jesteś shit.

acztery => Ta, a edycja kodu źródłowego Smarty ci napewno pójdzie jak po maśle, co? Znajdź w kodzie to miejsce, gdzie przypisywana jest zmienna Smarty (która potem wchodzi do pętli foreach w szablonie) i dodaj niej linki, do których się chcesz odwołać, a następnie zmodyfikuj kod wewnątrz pętli foreach w szablonie.


--------------------
Go to the top of the page
+Quote Post
domis86
post
Post #8





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Cytat(qqrq @ 27.09.2007, 21:46:54 ) *
acztery => Ta, a edycja kodu źródłowego Smarty ci napewno pójdzie jak po maśle, co? Znajdź w kodzie to miejsce, gdzie przypisywana jest zmienna Smarty (która potem wchodzi do pętli foreach w szablonie) i dodaj niej linki, do których się chcesz odwołać, a następnie zmodyfikuj kod wewnątrz pętli foreach w szablonie.


A jak sobie wyobrażasz taką funkcje dodającą linki do tekstu?

Ten post edytował domis86 27.09.2007, 21:00:54
Go to the top of the page
+Quote Post
AxZx
post
Post #9





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


w smarty to sie robi tak

Kod
{$dane.teskt|zamien}


zamien jest to funkcja ktora wyszuka slowa w tekscie i zamieni je na link. t u juz mozesz wyrazeniami regularnymi przejechac ten tekst.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
domis86
post
Post #10





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Cytat(AxZx @ 27.09.2007, 22:53:55 ) *
w smarty to sie robi tak

Kod
{$dane.teskt|zamien}


zamien jest to funkcja ktora wyszuka slowa w tekscie i zamieni je na link. t u juz mozesz wyrazeniami regularnymi przejechac ten tekst.


Ok, ale zeby dodac linki to trzeba pobrac całą tabele z bazy. To nie bedzie zbyt wydajne blinksmiley.gif
Go to the top of the page
+Quote Post
acztery
post
Post #11





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


"jesli nawet porzadnie systemu nie umiesz zaprojektowac." a co to znaczy questionmark.gif bo nie kumam.

PS młody jesteś wiec nie mów lepiej co się da w php a co się nie da...

AxZx tylko Twoje rozwiązanie wymagało by edycji wszystkich stron....

Ten post edytował acztery 27.09.2007, 22:11:46
Go to the top of the page
+Quote Post
domis86
post
Post #12





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Cytat(acztery @ 27.09.2007, 23:10:18 ) *
"jesli nawet porzadnie systemu nie umiesz zaprojektowac." a co to znaczy questionmark.gif bo nie kumam.

Powinieneś mieć jakiś model(lub modele) gdzie pobierasz tresci i zwracasz je do akcji. Dodawanie linkow powinno już być tam, wtedy byłyby one na wszystkich stronach. A jezeli mowisz, ze trzeba edytowac wszystkei strony zeby to zrobic to masz lipny system.

Cytat(acztery @ 27.09.2007, 23:10:18 ) *
PS młody jesteś wiec nie mów lepiej co się da w php a co się nie da...

Ty za to jesteś stary i jak widać twoja nauka poszła w las.

Ten post edytował domis86 27.09.2007, 22:19:47
Go to the top of the page
+Quote Post
qqrq
post
Post #13





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Czekaj, czekaj. Piszesz, że masz w serwisie "1000 podstron". I w każdej trzeba przerobić zwykłe napisy na linki? Porażka... No ale zaraz - jak PHP, to strony są pewnie generowane dynamicznie, więc o co chodzi, gdzie problem?

OK. W pliku PHP gdzieś musi być coś takiego tablica wczytana jakimś zapytaniem z bazy danych, a potem wyrzucona do Smarty:

  1. <?php
  2. // Przykład...
  3.  // ...
  4.  $query = mysql_query("SELECT slowo FROM slowa");
  5.  $tablica = array();
  6.  while ($row = mysql_fetch_array($query))
  7. $tablica[] = $row['slowo'];
  8.  $smarty->assign('Slowa',$tablica);
  9. ?>


a w pliku *.tpl mamy:

  1. {foreach from=$Slowa item=slowo}
  2. {$slowo}
  3. {/foreach}


No to zmieniamy to jakoś tak:


  1. <?php
  2. // Przykład...
  3.  // ...
  4.  $query = mysql_query("SELECT slowo,link FROM slowa");
  5.  $tablica = array();
  6.  while ($row = mysql_fetch_array($query))
  7. $tablica[] = $row;
  8.  $smarty->assign('Slowa',$tablica);
  9. ?>


  1. {foreach from=$Slowa item=slowo}
  2. <a href="index.php?slowo={$slowo.linl}">{$slowo.slowo}</a>
  3. {/foreach}


Ale to tylko zgadywanka. Póki nie podasz fragmentu kodu (co mogłeś w sumie dawno zrobić) nic innego nie poradzimy.

Ten post edytował qqrq 27.09.2007, 22:31:09


--------------------
Go to the top of the page
+Quote Post
acztery
post
Post #14





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

Ostrzeżenie: (0%)
-----


domis widze ze wiesz co do MVC.

mam funkcje która zwraca array zeby ci pokazać wkleje ja tutaj chodz wątpie ze to coś da...

  1. <?php
  2. public function getDoc()
  3. {
  4. if (self::countId($this->_where,$this->_lang) == 0)
  5. {
  6. throw new Exception(HExc(1,$this->_where));
  7. }else{
  8.  
  9. self::uploadCounter($this->_where,$this->_lang);
  10.  
  11. $db = parent::Connect();
  12. $db->query("set names 'utf8'");
  13. $db->whereAdd("documents.Lang = '$this->_lang'");
  14. $db->whereAdd("documents.Id = '$this->_where'");
  15. $pis = DB_DataObject::factory('user');
  16. $db->joinAdd($pis);
  17. $db->selectAdd('documents.CreateDate as CreateDate2');
  18. $db->limit(1);
  19. $db->find();
  20. while($db->fetch()) {
  21. $result['data'][] = $db->toArray();
  22. }
  23. return $result = isset($result) ? $result : null;
  24.  
  25. }
  26. }
  27. ?>



wiec ta metoda niech zwraca co sobie array po co mam w nią ładować dodatkowe rzeczy które tylko obciążą serwis.. Dlatego napisz modyfikator dla smarty.

qqrq chyba zabardzo nie rozumiesz co ja chce osiągnąć...

a osiągnac chce cos takiego

1 table 1 - tabela słówka w słowniku
2 table 2 - tresc danej podstrony

mamy np tekst.

"
Piosenka Kasi Groniec za darmo!
Jest to druga piosenka wybrana z albumu, który ukazał się w kwietniu tego roku. Nowy singiel łączy w sobie lekkość wykonania i głębię
"

w słowniku mamy np taki wyrażenia jak Groniec, singielm, lekkość

i wynikiem było by

"
Piosenka Kasi <a href="slownik,groniec.html">Groniec</a> za darmo!
Jest to druga piosenka wybrana z albumu, który ukazał się w kwietniu tego roku. Nowy <a href="slownik,gronsingiel.html">singiel</a> łączy w sobie <a href="slownik,lekkosc.html">lekkość</a> wykonania i głębię
"

teraz powinno byc zrozumiałe.
Go to the top of the page
+Quote Post
NoiseMc
post
Post #15





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


acztery, do widoku nie nalezy sprawdzanie czy slowo moze zalinkowac do slownika. To nalezy do modelu tak wiec w swojej funkcji getDoc() dodaj zamiast:
  1. <?php
  2. return $result = isset($result) ? $result : null;
  3. ?>

daj
  1. <?php
  2. if (! isset ($result))
  3. {
  4. return null;
  5. }
  6.  
  7. // Tutaj przykladowo tylko
  8. $text= $result['content']; //albo jak tam masz $result->content; wyciagasz tekst 'Piosenka Kasi...'
  9.  
  10. $words = explode (' ', $text);
  11.  
  12. foreach ($words as $key => $word)
  13. {
  14. // zapytaj baze czy ma w slowniku slowo
  15. if ($jestWSlownikuSlowo)
  16. {
  17. $word = '<a href="link.html">' . $word . '</a>';
  18. $words[$key] = $word;
  19. }
  20. }
  21.  
  22. $text = implode (' ', $words);
  23.  
  24. return $text;
  25. ?>


Oczywiscie porozbijaj sobie wszystko na zdania i pamietaj o przecinkach, to co napisalem to tylko taki szkic rozwiazania.
Jezeli natomiast nie chcesz pakowac za duzo kodu do klasy modelu to opakuj sobie ja w dekorator gdzie mozesz umiescic metode podlinkowujaca. Przykladu nie podam bo srednio mam wzorzec dekoratora opanowany ale cos mi swita ze pasowaloby go tutaj uzyc smile.gif
Potem wrzucasz gotowy tekst do smartow i nie martwisz sie o modyfikacje szablonow wcale.

Ten post edytował NoiseMc 28.09.2007, 00:04:50


--------------------
Go to the top of the page
+Quote Post
qqrq
post
Post #16





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


No i jasne, kolega ci tu ładnie podał.

Cytat(acztery @ 28.09.2007, 00:39:33 ) *
qqrq chyba zabardzo nie rozumiesz co ja chce osiągnąć...


No fakt, bo tak napisałeś. Trzeba było od razu napisać w ten sposób to byśmy nie gadali bez sensu.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:12