Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pasek narzedzi, w ktorym dodatki moga sie rejestrowac
q.michal
post
Post #1





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Czesc wszystkim


Chcialbym stworzyc pasek narzedzi, ktory wyswietlalby sie na okreslonych stronach. Mialby mozliwosc dodawania w nim tabow, a w tych zakladkach przyciskow, pod ktore bylyby podlaczone okreslone akcje. Chcialbym takze dac mozliwosc dodatkom rejestrowania swoich kart i przyciskow. Dzieki temu, na takim pasku mozna byloby znalezc chociazby przycisk do edycji artykulu, jezeli dana podstrona bylaby wlasnie zaladowana.

Zastanawiam sie jak to rozwiazac. Z jednej strony wyobrazam sobie, ze najpierw tworzylbym pasek i z niego tworzyl karte:

  1. $toolbar = new Toolbar();
  2. $tab1 = $toolbar->addTab('Tab1 name');
  3. $tab2 = $toolbar->addTab('Tab2 name');


Nastepnie na jednej z takich zakladek moglbym dodawac przyciski i separatory:

  1. $tab1->addButton('icon1.png', 'Button1', 'http://wp.pl/');
  2. $tab1->addSeparator();
  3. $tab1->addButton('icon2.png', 'Button2', 'http://onet.pl/');


Zapis wydaje sie byc czytelny i zrozumialy. A moze jednak, powinienem uznac ze kazdy element takiego toolbara jest obiektem i podejsc do problemu od 2 strony, tj najpierw stworzyc, przyciski, pozniej umiescic je na tabie, ktory ostatecznie zaalokowac na pasku narzedzi?

  1. $tab1 = new Toolbar\Tab();
  2. $tab2 = new Toolbar\Tab();
  3.  
  4. $tab1->addElement(new Toolbar\Button('icon1.png', 'Button1', 'http://wp.pl/'));
  5. $tab1->addElement(new Toolbar\Separator());
  6. $tab1->addElement(new Toolbar\Button('icon2.png', 'Button2', 'http://onet.pl/'));
  7.  
  8. $toolbar = new Toolbar();
  9. $toolbar->addTab($tab1);
  10. $toolbar->addTab($tab2);



Ktora opcja jest wg Was lepsza i dlaczego? A moze polecicie jeszcze inne rozwiazanie?
Docelowo, chcialbym aby na pasku narzedzi mogly znalezc sie tylko zakladki, a na kazdej zakladce mogly byc umieszczone:
* przyciski,
* listy rozwijane
* przyciski z rozwijanymi menu
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
gitbejbe
post
Post #2





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


dlaczego w ogóle budujesz elementy szablonu w phpie ? Wg mnie to bez sensu. Akce możesz przeciez elegancko obsłużyć w javascript/ajax a po stronie php'a zostanie tylko obsługa żądań. Zapis zmian wrzucasz do bazy i je wyciągasz wg twoich założeń

Ten post edytował gitbejbe 23.03.2016, 21:28:46
Go to the top of the page
+Quote Post
q.michal
post
Post #3





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


No tak, ale jak dorzucisz do systemu jakis dodatek i bedzie on zaladowany podczas wyswietlania danej podstrony, to on musi zarejestrowac na tym toolbarze, swoje przyciski, ew. calego taba.
Wiec chcialem dac taka mozliwosc po stronie PHP, a pozniej odpowiednio wygenerowac widok.
Go to the top of the page
+Quote Post
gitbejbe
post
Post #4





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


to przede wszystkim zastanów się na podstawie czego będzie go generował. Jeśli użytkownik sobie skonfiguruje jakieś tam przyciski, to rozumiem, że będzie miał możliwość zapisania tej konfiguracji. Skoro pojawia się zapis, to siłą rzeczy musisz wrzucić do bazy tą konfiguracje. Zrobisz to zapewne w ten sposób , że użytkownik o ID jakiś tam, ma np

  1. ['buttons' =>
  2. [ 1 => [ 'img' => 'costam.png',
  3. 'url' => 'www.costam.pl',
  4. 'action' => 'redirect',
  5. ....
  6. ],
  7. 2 -> [...]
  8.  
  9. ]
  10. ]


jeśli użytkownik ponownie wejdzie na stronę, na której powinien zobaczyć swoją konfiguracje, to wybierasz z bazy zapis, w php'ie go obrabiasz dla widoku i tyle. Tak więc Twoja klasę - jeśli uważasz ją za konieczną, napisałbym w kierunku obróbki dla gotowego zestawu danych. Wrzucasz całą konfiguracje przy tworzeniu obiektu, a klasa sama wszystko obrabia wg Twoich założeń i zwraca Ci gotowe dane dla widoku, które wyświetlisz sobie gdzie i jak chcesz. Proponuje rozbić klasę na abstrakcyjną - główną, oraz klasy po niej dziedziczące - czyli wszystkie elementy, które toolbar będzie posiadał. Klasa główna będzie rozpoznawać po wprowadzonych danych, jakie klasy dziedziczące wywołać. W ten sposób łatwo będziesz mógł dodawać nowe elementy jak i modyfikować już istniejące.
Go to the top of the page
+Quote Post
q.michal
post
Post #5





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Bardziej chodzilo mi o sam dodatek. Przykladowo piszesz dodatek wyswietlajacy na stronie artykuly, wiec taki dodatek moglby zarejestrowac swoje przyciski na toolbarze. Dzieki temu, po zalogowaniu sie jako administrator nie mialbys przyciskow do edycji, badz usuniecia artykulu obok jego nazwy na stronie, tylko na globalnym pasku narzedzi na tabie 'Artykuly'. Tutaj nie decydowalby uzytkownik, czy administrator strony, tylko osoba tworzaca dane rozszerzenie do systemu. Taki toolbar dawalby mozliwosc wykonania podstawowych czynnosci administracyjnych, bez koniecznosci logowania sie do panelu administratora, ale to jakie przyciski by sie tam znalazly, zalezaloby od wlaczonych dodatkow.

Wyobrazalem sobie zatem, ze np z rejestru, dodatek bedzie mogl pobrac sobie objekt toolbara i dodac do niego dowolna ilosc zakladek/przyciskow, a nastepnie na tej podstawie wygenerowany zostanie widok.

Ten post edytował q.michal 24.03.2016, 11:04:52
Go to the top of the page
+Quote Post
gitbejbe
post
Post #6





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


Nie zrozumiałem wcześniej do końca tego co chcesz zrobić. W takim razie powinieneś poczytać o wzorcu Registry.
Go to the top of the page
+Quote Post
q.michal
post
Post #7





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Powracajac do pierwotnego pytania. Zastanawiam sie jak to rozwiazac od strony designu.
Czy wybrac wariant A, tj. z objektu toolbara tworzyc taby, a z tabow przyciski i separatory, czy wariant B - przyjac ze wszystko jest objektem i przekazywac objekty przyciskow/separatorow/list/itp do taba a taby do toolbara?

Ktos moze sie wypowiedziec, co bedzie bardziej optymalne, ew. jakie moze niesc za soba limity?
Go to the top of the page
+Quote Post
gitbejbe
post
Post #8





Grupa: Zarejestrowani
Postów: 516
Pomógł: 63
Dołączył: 27.08.2012

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


To wg mnie 2 sposób będzie lepszy. Napisałbym to w tym kierunku:

  1. abstract class toolbar {
  2.  
  3. private $toolbar = array();
  4.  
  5. public function createElement(string $elementName, array $data){
  6.  
  7. switch($elementName){
  8. case 'tab': require_once('toolbarTab.php'); return new toolbarTab($data);
  9. case 'button': require_once('toolbarButton.php'); return new toolbarButton($data);
  10. ...
  11. default: throw new Exception('wrong element name.');
  12. }
  13. }
  14.  
  15. private function save($name, $element){
  16. $this->toolbar[$name] = $element
  17. }
  18.  
  19. public function getToolbar(){
  20. return $this->toolbar;
  21. }
  22.  
  23. public function getToolbarElement($name){
  24. return $this->toolbar[$name];
  25. }
  26.  
  27. abstract public function addElement();
  28. abstract public function execute();
  29. }
  30.  
  31.  
  32. class toolbarTab extends toolbar{
  33.  
  34. private $tab = array('data' => [], 'elements' => []);
  35.  
  36. // nie sugeruj się takimi rzeczami, piszę ogólnikowo
  37. function __construct(array $data){
  38. $this->tab['data'] = $data;
  39. }
  40.  
  41. public function addElement($elementObj){
  42. $this->tab['elements'][] = $elementObj->execute();
  43. }
  44.  
  45. public function execute(){
  46. return $this->tab;
  47. }
  48. }
  49.  
  50. $toolbar = new toolbar();
  51.  
  52. $toolbarTab = $toolbar->createElement('tab', [data1, data2]);
  53. $toolbarTab->addElement($toolbar->create('button', [data1, data2]));
  54.  
  55. $toolbar->save('tab1', $toolbarTab->execute());
  56.  
  57. $toolbarAllElements = $toolbar->getToolbar();
  58.  

To tylko bardzo ubogi przykład. Sorki za ewentualne błędy w składni, ostatnio dużo pisze w innych językach

EDIT: Lepiej by to wyglądało jednak w oparciu o interface'y niż dziedziczenie - w tym konkretnym przykładzie. Mam teraz na biurku browarka, tak więc nie chce mi się teraz tego poprawiać. Mam nadzieje jednak że wiesz o co mi chodzi

Ten post edytował gitbejbe 24.03.2016, 19:44:37
Go to the top of the page
+Quote Post
q.michal
post
Post #9





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Wszystko jasne, wielkie dzieki!
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.09.2025 - 04:58