Создание компонента - backend.php

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Вопросы и решение

#1 21 ноября 2012 в 12:33
Здравствуйте!
Ситуация:
У меня нет клиентской части компонента, да и не нужна в моем случае. Реализовал ее через модуль здесь ход работы.
Нужно написать компонент только для администратора.
Вопросы:
1. Как реализовать установку данного компонента?
Правильно ли я понимаю что в корне сайте, в разделе components, я создаю папку с названием компонента, например — gdspec. В нее кладу: index.php, install.php и больше ничего?
Или, все же здесь, нужно так же создать router.php, model.php?
2. К примеру, я создал компонент для админки — backend.php, положил его в нужную директорию. Что мне нужно сделать чтобы данный компонент отобразился в админке и можно было бы им управлять?

P.S.: пытался как можно подробнее свои мысля изъяснить. Если нужно что дополнить, я дополню.

Обращаюсь к сообщу за помощью. СПС за внимание!

Как всегда небольшое молчание.
Поломав голову и перебрав все компоненты. Пришел к следующему:
1. Компонент устанавливается из директории /componets/моя компонент/install.php
В этой же директории model.php и router.php
2. ответ в первом.

Написал скрипт install.php:
  1. <?php
  2.  
  3. // ========================================================================== //
  4.  
  5. function info_component_gdspec(){
  6.  
  7. //Описание компонента
  8.  
  9. $_component['title'] = 'GDSPEC'; //название
  10. $_component['description'] = 'GDSPEC'; //описание
  11. $_component['link'] = 'gdspec'; //ссылка (идентификатор)
  12. $_component['author'] = 'braincord'; //автор
  13. $_component['internal'] = '1'; //внутренний (только для админки)? 1-Да, 0-Нет
  14. $_component['version'] = '1.9'; //текущая версия
  15.  
  16. $_component['config'] = array();
  17. return $_component;
  18.  
  19. }
  20.  
  21. // ========================================================================== //
  22.  
  23. function install_component_gdspec(){
  24.  
  25. $inCore = cmsCore::getInstance(); //подключаем ядро
  26. $inDB = cmsDatabase::getInstance(); //подключаем базу данных
  27. $inConf = cmsConfig::getInstance();
  28.  
  29. include(PATH.'/includes/dbimport.inc.php');
  30.  
  31. return true;
  32.  
  33. }
  34.  
  35. // ========================================================================== //
  36.  
  37. function upgrade_component_gdspec(){
  38.  
  39. return true;
  40.  
  41. }
  42.  
  43. // ========================================================================== //
  44.  
  45. ?>
Сразу возникли вопросы:
1. Правильно ли я понимаю,
  1. если $_component['internal'] = '1';
, то данный компонент отображается только в админке, а если 0 то компонент отображаться будет и там и там?
2.
  1. dbRunSQL(PATH.'/components/gdspec/install.sql', $inConf->db_prefix);
— не писал, так как в базе уже создана таблица.
Можете проверить правильно ли я сделал?

Приступил к написанию model.php (что есть сейчас):
  1. <?php
  2.  
  3. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
  4.  
  5. function gdspec(){
  6. //Инициализируем объекты, которые нам понадобятся
  7. $inCore = cmsCore::getInstance(); //подключаем ядро
  8. $inDB = cmsDatabase::getInstance(); //подключаем базу
  9. $inUser = cmsUser::getInstance();//подключаем пользователей, может и не понадобться так, как я не делал связи с таблице cms_users
  10.  
  11. $inCore->loadModel('gdspec'); //загружаем модель
  12. $model = new cms_model_gdspec(); //создадим объект модели
  13. global $_LANG;//подключение языка - это скорей всего не понадобиться ведь я не использую frontend.php
  14.  
  15. $do = $inCore->request('do', 'str', 'click');//Получаем текущее действие из URL страницы
  16.  
  17. //======================================================================================================================//
Честно говоря? не понимаю, нужен ли мне model.php. Как я понял, данный скрипт обрабатывает все функции для frontend.php. А в моем случае только backend.php нужен. Помогите разобраться. Есть смысл писать model.php? Или достаточно сделать install.php и router.php?
Как мне показать, что есть в админке backend.php? Т.е. при нажатии в меню (админка) название компонента, открывался копонент заложенный в admin/components/gdspec/backend.php.
#2 21 ноября 2012 в 19:36
Прощу помощи в разборе обновленной информации в предыдущем сообщении. zst
#3 21 ноября 2012 в 19:49

Как мне показать, что есть в админке backend.php? Т.е. при нажатии в меню (админка) название компонента, открывался копонент заложенный в admin/components/gdspec/backend.php

braincord
Положите файл admin/components/gdspec/backend.php и админка появится после установки.
Во фронтендовой части нужен только install.php, и то только для установки компонента. router.php вообще не нужен, если нет необходимости во фронтенд- доступе. model.php на ваше усмотрение. Запросы ведь можно писать и в backend.php.
Аналогично сделан компонент seo-pages. Только из-за необходимости админки. Модель сделал, но можно было обойтись и без него.
#4 21 ноября 2012 в 20:11
Марат, спасибо огромное. Сразу куча вопросов отпала. Буду дальше копать.:)
#5 22 ноября 2012 в 04:55

model.php на ваше усмотрение. Запросы ведь можно писать и в backend.php


MVC, не не слышал?
#6 22 ноября 2012 в 05:39
kir, поясните пожалуйста.
Как я понял про MVC:
model — это model.php
viev — это *tpl
Controller — fronted.php

Мне не понятен механизм привязки backend.php при установке компонета, что именно из папки admin/components/название компонента/backend.php надо брать для данного компонента?
#7 22 ноября 2012 в 08:27

MVC, не не слышал?

kir
Промолчу…
#8 22 ноября 2012 в 09:19

model — это model.php
viev — это *tpl
Controller — fronted.php

braincord
в контексте данной cms, да правильно., по крайне мере местами)

MVC надо использоваться по сути везде, даже для backend'ов, но, к сожалению, в админке как таковой "вид" в данной cms не используется)
#9 22 ноября 2012 в 09:22

Мне не понятен механизм привязки backend.php при установке компонета, что именно из папки admin/components/название компонента/backend.php надо брать для данного компонента?


в плане при установке?) если есть файл по пути "admin/components/название компонента/backend.php" то значит у компонента есть админка. т.е компонент можно поставить без админки, а потом просто закачать туда этот файл
#10 22 ноября 2012 в 11:16
kir, появилась:)
#11 22 ноября 2012 в 11:43

Есть смысл писать model.php?

braincord
модель нужна, если есть работа с базой
все запросы должны быть в модели
instantcms.ru/wiki/doku.php/%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0:%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D1%8B:%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0
#12 22 ноября 2012 в 13:11
r2, спасибо за ответ. В этом я уже разобрался. Разбираюсь с админской частью. Как она устроена. Появятся вопросы напишу, надеюсь разъясните.
#13 26 ноября 2012 в 07:02
Возник вопрос: разбираю компонент вопросы-ответы. На основе его учусь, и пытаюсь переписать его под свои нужды.
вот что я сдела:
1. Попытался переписать вывод всех вопросов — возникает ошибка (переписал и работает добавление нового вопроса(в моем случае направления, удаление, редактирование) Помогите разобраться, почему не выводится список вопросов вот здесь:
  1. if ($opt == 'list_items'){
  2. cpAddPathway('Все направления', '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=list_items');
  3. echo '<h3>Все направления</h3>';
  4.  
  5. //TABLE COLUMNS - фильтр все направления (статичный)
  6. $fields = array();
  7.  
  8. $fields[0]['title'] = 'id'; $fields[0]['field'] = 'id'; $fields[0]['width'] = '30';
  9.  
  10. $fields[1]['title'] = 'Откуда'; $fields[1]['field'] = 'f_gdpec'; $fields[1]['width'] = '';
  11. $fields[1]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=edit_item&item_id=%id%';
  12. $fields[1]['filter'] = 15;
  13. $fields[1]['maxlen'] = 80;
  14.  
  15. $fields[2]['title'] = 'Куда'; $fields[2]['field'] = 'w_gdpec'; $fields[2]['width'] = '';
  16. $fields[2]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=edit_item&item_id=%id%';
  17. $fields[2]['filter'] = 15;
  18. $fields[2]['maxlen'] = 80;
  19.  
  20. $fields[3]['title'] = 'Категория направления'; $fields[3]['field'] = 'catgd_id';$fields[3]['width'] = '300';
  21. $fields[3]['prc'] = 'cpGDspecCatById'; $fields[3]['filter'] = 1; $fields[3]['filterlist'] = cpGetList('cms_gdspec_cat');
  22.  
  23. $fields[4]['title'] = 'Показ'; $fields[4]['field'] = 'published'; $fields[4]['width'] = '100';
  24. $fields[4]['do'] = 'opt'; $fields[4]['do_suffix'] = '_item';
  25.  
  26. //ACTIONS - фильтр моментально реагирует
  27. $actions = array();
  28. $actions[0]['title'] = 'Редактировать';
  29. $actions[0]['icon'] = 'edit.gif';
  30. $actions[0]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=edit_item&item_id=%id%';
  31.  
  32. $actions[1]['title'] = 'Удалить';
  33. $actions[1]['icon'] = 'delete.gif';
  34. $actions[1]['confirm'] = 'Удалить вопрос?';
  35. $actions[1]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=delete_item&item_id=%id%';
  36.  
  37. //Print table
  38. cpListTable('cms_gdspec', $fields, $actions);
  39. }
2. переписал категории вопросов — категории направлений (работает: добавление- редактирование- выводится список категорий)
Для категорий правил файл cp.php и все заработало.
Листинг всего файла backend.php:
  1. <?php
  2. if(!defined('VALID_CMS_ADMIN')) { die('ACCESS DENIED'); }
  3. /******************************************************************************/
  4. // //
  5. // InstantCMS v1.9 //
  6. // http://instantcms.ru/ //
  7. // //
  8. // written by InstantCMS Team, 2007-2011 //
  9. // produced by InstantSoft, (www.instantsoft.ru) //
  10. // //
  11. // LICENSED BY GNU/GPL v2 //
  12. // //
  13. /******************************************************************************/
  14.  
  15. cpAddPathway('ЖД направления', '?view=components&do=config&id='.(int)$_REQUEST['id']);
  16. echo '<h3>ЖД направления</h3>';
  17. if (isset($_REQUEST['opt'])) { $opt = $_REQUEST['opt']; } else { $opt = 'list_items'; }
  18.  
  19. $toolmenu = array();
  20. if($opt != 'config'){
  21. $toolmenu[0]['icon'] = 'newstuff.gif';
  22. $toolmenu[0]['title'] = 'Новое направление';
  23. $toolmenu[0]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=add_item';
  24.  
  25. $toolmenu[1]['icon'] = 'newfolder.gif';
  26. $toolmenu[1]['title'] = 'Категрия направления';
  27. $toolmenu[1]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=add_cat';
  28.  
  29. $toolmenu[2]['icon'] = 'liststuff.gif';
  30. $toolmenu[2]['title'] = 'Все направления';
  31. $toolmenu[2]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=list_items';
  32.  
  33. $toolmenu[3]['icon'] = 'folders.gif';
  34. $toolmenu[3]['title'] = 'Категории направлений';
  35. $toolmenu[3]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'].'&opt=list_cats';
  36.  
  37. if($opt == 'list_items' || $opt == 'show_item' || $opt == 'hide_item'){
  38. $toolmenu[11]['icon'] = 'edit.gif';
  39. $toolmenu[11]['title'] = 'Редактировать выбранные';
  40. $toolmenu[11]['link'] = "javascript:checkSel('?view=components&do=config&id=".(int)$_REQUEST['id']."&opt=edit_item&multiple=1');";
  41.  
  42. $toolmenu[12]['icon'] = 'show.gif';
  43. $toolmenu[12]['title'] = 'Публиковать выбранные';
  44. $toolmenu[12]['link'] = "javascript:checkSel('?view=components&do=config&id=".(int)$_REQUEST['id']."&opt=show_item&multiple=1');";
  45.  
  46. $toolmenu[13]['icon'] = 'hide.gif';
  47. $toolmenu[13]['title'] = 'Скрыть выбранные';
  48. $toolmenu[13]['link'] = "javascript:checkSel('?view=components&do=config&id=".(int)$_REQUEST['id']."&opt=hide_item&multiple=1');";
  49.  
  50. $toolmenu[14]['icon'] = 'delete.gif';
  51. $toolmenu[14]['title'] = 'Удалить выбранные';
  52. $toolmenu[14]['link'] = "javascript:checkSel('?view=components&do=config&id=".(int)$_REQUEST['id']."&opt=delete_item&multiple=1');";
  53. }
  54. }
  55. if($opt == 'config'){
  56. $toolmenu[16]['icon'] = 'save.gif';
  57. $toolmenu[16]['title'] = 'Сохранить';
  58. $toolmenu[16]['link'] = 'javascript:document.optform.submit();';
  59. }
  60.  
  61. if($opt != 'list_items' && $opt != 'list_cats'){
  62. $toolmenu[17]['icon'] = 'cancel.gif';
  63. $toolmenu[17]['title'] = 'Отмена';
  64. $toolmenu[17]['link'] = '?view=components&do=config&id='.(int)$_REQUEST['id'];
  65. }
  66.  
  67. cpToolMenu($toolmenu);
  68.  
  69.  
  70.  
  71. if ($opt == 'show_item'){
  72. if (!isset($_REQUEST['item'])){
  73. if (isset($_REQUEST['item_id'])){ dbShow('cms_gdspec', (int)$_REQUEST['item_id']); }
  74. echo '1'; exit;
  75. } else {
#14 26 ноября 2012 в 08:25
У меня получилось вывести, добавив в таблицу gd_spec поле putdate. Подскажите где обработчик запроса стоит? не могу найти его чтобы отредактировать…
#15 27 ноября 2012 в 05:51
спасибо всем за помощь:)
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.