Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Модули

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
melomaniac
Отправлено: 11 Марта, 2015 - 08:20:26
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Всем привет. Есть модуль A к примеру в котором выводится меню(ну например), и есть модуль B. Объясните пожалуйста на пальцах кто-нибудь как расширить меню в классе(модуле) A с помощью класса(модуля) B не изменяя модуля(класса) A. Или к примеру есть у нас форма обычная которая выводится с помощью модуля A, как добавить в эту форму поле с помощью класса B, т.е. задачи разные могут быть, вопрос в том как расширять один модуль за счет другого, т.е. есть модуль A, у нас к примеру выводится 5 полей формы, пятое добавлено с помощью модуля B, удалили модуль B, вывелось 4 поля формы и т.д. Вопрос скорее теоретический, но интересуют именно способы реализации подобных вещей.

P.S: Оба модуля наследуются от одного родительского класса, к примеру С, т.е. A extends C и B extends C
 
 Top
GoDr
Отправлено: 12 Марта, 2015 - 08:17:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




У себя подобное я решил через javascript.

Т.е. У нас где-то в базе хранятся настройки и ссылки Модуля А. И это известно. Далее добавляем в настройки Модуля Б настройку "куда вставлять". Например, после какой ссылки должен вставляться модуль.

Далее при выводе при помощи, например, jQuery в нужный элемент DOM`а Модуля А вставляем содержимое Модуля Б

Можно усложнить.. Если модули А и Б одинаковые, то можно сделать настройки
- в какой модуль вставлять
- после какой ссылки вставлять..

Соответственно для модуля А это будет
- ни в какой
- ни после какой

А вообще нужно знать как эти модули вставляются. Иначе можно тоже самое делать на уровне PHP


-----
Система управления веб-содержимым Lotos CMS
 
 Top
melomaniac
Отправлено: 15 Марта, 2015 - 10:17:29
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




GoDr пишет:
У себя подобное я решил через javascript.

Т.е. У нас где-то в базе хранятся настройки и ссылки Модуля А. И это известно. Далее добавляем в настройки Модуля Б настройку "куда вставлять". Например, после какой ссылки должен вставляться модуль.

Далее при выводе при помощи, например, jQuery в нужный элемент DOM`а Модуля А вставляем содержимое Модуля Б

Можно усложнить.. Если модули А и Б одинаковые, то можно сделать настройки
- в какой модуль вставлять
- после какой ссылки вставлять..

Соответственно для модуля А это будет
- ни в какой
- ни после какой

А вообще нужно знать как эти модули вставляются. Иначе можно тоже самое делать на уровне PHP


Спасибо, но интересует именно решение на php. Инфы особо как таковой не нашел(может искал не то/не там). Есть про хуки, но я так понял это дурной тон, а найти подобное в ооп стиле мне не удалось Огорчение
 
 Top
Ts.Saltan
Отправлено: 15 Марта, 2015 - 10:41:39
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




melomaniac пишет:
Есть модуль A к примеру в котором выводится меню(ну например), и есть модуль B. Объясните пожалуйста на пальцах кто-нибудь как расширить меню в классе(модуле) A с помощью класса(модуля) B не изменяя модуля(класса) A

То?
PHP:
скопировать код в буфер обмена
  1. <?
  2. class mainMenu{
  3.         private $items = ['Главная' => 'index'];
  4.        
  5.         final public function addItem($name, $alias){
  6.                 $this->items[$name] = $alias;
  7.         }
  8.        
  9.         final public function show(){
  10.                 ?><ul><?
  11.                 foreach($this->items as $item=>$href){
  12.                         ?><li><a href="<?=$href?>"><?=$item?></a></li><?
  13.                 }
  14.                 ?></ul><hr/><?
  15.         }
  16. }
  17.  
  18. class menuA extends mainMenu{
  19.         public function __construct(){
  20.                 $this->addItem('Профиль', 'profile');
  21.                 $this->addItem('Выход', 'exit');
  22.         }
  23. }
  24.  
  25.  
  26.  
  27. $menu = new mainMenu;
  28. $menu->show();
  29. // * Главная
  30.  
  31.  
  32. $menu = new menuA;
  33. $menu->show();
  34. /*
  35.  * Главная
  36.  * Профиль
  37.  * Выход
  38. */     
 
 Top
GoDr
Отправлено: 15 Марта, 2015 - 16:46:37
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




melomaniac пишет:
Спасибо, но интересует именно решение на php.
Для PHP очень мало информации.. Нужно как минимум видеть код модулей. А вообще не помешало бы и скелет движка


-----
Система управления веб-содержимым Lotos CMS
 
 Top
melomaniac
Отправлено: 16 Марта, 2015 - 09:58:18
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Ts.Saltan пишет:
melomaniac пишет:
Есть модуль A к примеру в котором выводится меню(ну например), и есть модуль B. Объясните пожалуйста на пальцах кто-нибудь как расширить меню в классе(модуле) A с помощью класса(модуля) B не изменяя модуля(класса) A

То?
PHP:
скопировать код в буфер обмена
  1. <?
  2. class mainMenu{
  3.         private $items = ['Главная' => 'index'];
  4.        
  5.         final public function addItem($name, $alias){
  6.                 $this->items[$name] = $alias;
  7.         }
  8.        
  9.         final public function show(){
  10.                 ?><ul><?
  11.                 foreach($this->items as $item=>$href){
  12.                         ?><li><a href="<?=$href?>"><?=$item?></a></li><?
  13.                 }
  14.                 ?></ul><hr/><?
  15.         }
  16. }
  17.  
  18. class menuA extends mainMenu{
  19.         public function __construct(){
  20.                 $this->addItem('Профиль', 'profile');
  21.                 $this->addItem('Выход', 'exit');
  22.         }
  23. }
  24.  
  25.  
  26.  
  27. $menu = new mainMenu;
  28. $menu->show();
  29. // * Главная
  30.  
  31.  
  32. $menu = new menuA;
  33. $menu->show();
  34. /*
  35.  * Главная
  36.  * Профиль
  37.  * Выход
  38. */     


Логика да, почти. Только немного не так, как раз таки наоборот нужно, иначе не парился бы Улыбка
PHP:
скопировать код в буфер обмена
  1.  
  2. $menu = new mainMenu;
  3. $menu->show();
  4. /*
  5.  * Главная
  6.  * Профиль
  7.  * Выход
  8. */
  9.  
 
 Top
Ts.Saltan
Отправлено: 16 Марта, 2015 - 17:27:24
Post Id



Посетитель


Покинул форум
Сообщений всего: 384
Дата рег-ции: Дек. 2013  
Откуда: Belarus


Помог: 22 раз(а)




melomaniac пишет:
Логика да, почти. Только немного не так, как раз таки наоборот нужно, иначе не парился бы

Тогда статику надо использовать
Типа такого
PHP:
скопировать код в буфер обмена
  1. <?
  2. class mainMenu{
  3.         private static $items = ['Главная' => 'index'];
  4.        
  5.         final public static function addItem($name, $alias){
  6.                 self::$items[$name] = $alias;
  7.         }
  8.        
  9.         final public static function show(){
  10.                 ?><ul><?
  11.                 foreach(self::$items as $item=>$href){
  12.                         ?><li><a href="<?=$href?>"><?=$item?></a></li><?
  13.                 }
  14.                 ?></ul><hr/><?
  15.         }
  16. }
  17.  
  18. class menuA extends mainMenu{
  19.         public function __construct(){
  20.                 self::addItem('Профиль', 'profile');
  21.         }
  22. }
  23.  
  24.  
  25. class menuB extends mainMenu{
  26.         public function __construct(){
  27.                 self::addItem('Выход', 'exit');
  28.         }
  29. }
  30.  
  31. new menuA();
  32. new menuB();
  33.  
  34.  
  35. mainMenu::show();
  36.  
  37. /*
  38.  * Главная
  39.  * Профиль
  40.  * Выход
  41. */     

Только ИМХО, на костыль какой-то смахивает
 
 Top
DeepVarvar Супермодератор
Отправлено: 16 Марта, 2015 - 17:47:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




melomaniac пишет:
как раз таки наоборот нужно
Ну пал палыч...
PHP:
скопировать код в буфер обмена
  1. class Item
  2. {
  3.     private $_name = null;
  4.     public function __construct($name)
  5.     {
  6.         $this->_name = $name;
  7.     }
  8.     public function run()
  9.     {
  10.         echo 'Item: ' . $this->_name . '<br>';
  11.     }
  12. }
  13.  
  14. class MyItems
  15. {
  16.     private $_items = array();
  17.     public function appendItem(Item $item)
  18.     {
  19.         $this->_items[] = $item;
  20.     }
  21.     public function runItems()
  22.     {
  23.         foreach ($this->_items as $item) {
  24.             $item->run();
  25.         }
  26.     }
  27. }
  28.  
  29. $items = new MyItems();
  30. $items->appendItem(new Item('A'));
  31. $items->appendItem(new Item('B'));
  32. $items->appendItem(new Item('C'));
  33. $items->appendItem(new Item('D'));
  34. $items->run();
Вот те "поля формы". Не?
 
 Top
melomaniac
Отправлено: 25 Марта, 2015 - 17:33:40
Post Id



Новичок


Покинул форум
Сообщений всего: 61
Дата рег-ции: Февр. 2014  


Помог: 0 раз(а)




Всем спасибо за помощь, разобрался вроде бы Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB