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
gitbejbe
post
Post #2





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

Posty w temacie


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: 14.10.2025 - 11:33