Компонент ''Система патчей''

Ищу единомышленников.

Идея стоит выделки?

Для участия в голосовании необходима регистрация на сайте
#16 21 июня 2014 в 19:29
Уважаемые Гуру — подскажите.
Есть в файлах grid_* такой вод код
  1.  
  2. $actions = array(
  3. 'title' => LANG_EDIT,
  4. 'class' => 'edit',
  5. 'href' => href_to($controller->root_url, 'edit', array('{id}')),
  6. ),
  7.  
Подскажите в каком месте и как инициализируется $controller?
#17 22 июня 2014 в 00:40
Друзья — ну помогите.
#18 23 июня 2014 в 00:12
Скорпион, так это аргумент функции, там где функция вызывается — там и инициализируется.
#19 23 июня 2014 в 00:26
Это я понял. Но вот смотрю на примере того же компонента "Теги" и не где не вижу где это инициализируется. Но там оно работет, а в моем случае, в моем шаблоне вывода информации — нет.
Пока вышел из ситуации заменой данной строчки на:
  1. 'href' => href_to($this->controller->root_url, 'add')
Теперь формирование урла выполняется правильно.
А при
  1. 'href' => href_to($controller->root_url, 'edit', array('{id}')),
на выходе получал add
#20 23 июня 2014 в 00:32
Все таки не зря я сначала озадачился скриптом замены. После создания и изучения данной функции мне легче было понять какие таблицы нужно создать в базе.
На данный момент остановился на этом:
  1.  
  2. INSERT INTO `{#}controllers` (`title`, `name`, `is_enabled`, `options`, `author`, `url`, `version`, `is_backend`) VALUES
  3. ('Мои патчи', 'mypatch', 1, '', 'Scorpion', '', '1.0', 1);
  4.  
  5. DROP TABLE IF EXISTS `{#}mypatch`;
  6. CREATE TABLE IF NOT EXISTS `{#}mypatch` (
  7. `id` int(11) NOT NULL,
  8. `description` varchar(100) DEFAULT NULL,
  9. `file_path_id` int(11) DEFAULT NULL,
  10. `file_name_id` int(11) DEFAULT NULL,
  11. `order_patch` tinyint(4) DEFAULT NULL,
  12. `code_search` text DEFAULT NULL,
  13. `code_replace` text DEFAULT NULL,
  14. `shifts` text DEFAULT NULL,
  15. `state` tinyint(4) DEFAULT NULL
  16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  17.  
  18. DROP TABLE IF EXISTS `{#}mypatch_paths`;
  19. CREATE TABLE IF NOT EXISTS `{#}mypatch_paths` (
  20. `id` int(11) NOT NULL,
  21. `file_path` varchar(100) DEFAULT NULL
  22. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  23.  
  24. DROP TABLE IF EXISTS `{#}mypatch_files`;
  25. CREATE TABLE IF NOT EXISTS `{#}mypatch_files` (
  26. `id` int(11) NOT NULL,
  27. `file_name` varchar(20) DEFAULT NULL
  28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  29.  
  30.  
  31. ALTER TABLE `{#}mypatch`
  32. ADD PRIMARY KEY (`id`);
  33.  
  34. ALTER TABLE `{#}mypatch_paths`
  35. ADD PRIMARY KEY (`id`);
  36.  
  37. ALTER TABLE `{#}mypatch_files`
  38. ADD PRIMARY KEY (`id`);
  39.  
  40. ALTER TABLE `{#}mypatch`
  41. MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
  42. ALTER TABLE `{#}mypatch_paths`
  43. MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
  44. ALTER TABLE `{#}mypatch_files`
  45. MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
  46.  
#21 23 июня 2014 в 00:34
Возможно не все верно там при создании, поэтому если у кого есть советы или вопросы — буду рад выслушать.
#22 23 июня 2014 в 14:41
Уважаемые- помогите. Чет не могу понять в чем проблема.
Исходные файлы:


  1.  
  2. <?php
  3.  
  4. class actionMypatchAdd extends cmsAction {
  5.  
  6. public function run(){
  7.  
  8. $is_can_add = cmsUser::isAdmin();
  9.  
  10. if (!$is_can_add) { cmsCore::error404(); }
  11.  
  12. $errors = false;
  13.  
  14. $form = $this->getForm('patch');
  15.  
  16. $is_submitted = $this->request->has('submit');
  17.  
  18. $patch = $form->parse($this->request, $is_submitted);
  19.  
  20. if ($is_submitted) {
  21.  
  22. $errors = $form->validate($this, $patch) ;
  23.  
  24. if (!$errors){
  25. // $patch_id = $this->model->addPatch($patch);
  26. $this->redirectToAction('index', array($patch));
  27. }
  28.  
  29. if ($errors){
  30. cmsUser::addSessionMessage(LANG_FORM_ERRORS, 'error');
  31.  
  32. }
  33.  
  34. }
  35.  
  36. $template = cmsTemplate::getInstance();
  37.  
  38. $template->render('backend/patch', array(
  39. 'do' => 'add',
  40. 'form' => $form,
  41. 'patch' => $patch,
  42. 'errors' => $errors
  43. ));
  44.  
  45.  
  46. }
  47.  
  48. }
  49.  

  1.  
  2. <?php
  3.  
  4. class formMypatchPatch extends cmsForm {
  5.  
  6. public function init(){
  7.  
  8. return array(
  9.  
  10. 'tupe' => 'fieldset',
  11. 'childs' => array(
  12.  
  13. new fieldString('file', array(
  14. 'file' => LANG_MYPATCH_FILE,
  15. 'rules' => array (
  16. array('required'),
  17. array('max_length', 100),
  18. array('min_length', 10)
  19. )
  20. ))
  21. )
  22. )
  23. );
  24. }
  25. }
  26.  

  1.  
  2. <?php
  3.  
  4. // $this->addBreadcrumb(LANG_MYPATCH_CONTROLLER, $this->href_to(''));
  5.  
  6. if ($do == 'add') { $page_title = LANG_MYPATCH_ADD;}
  7. if ($do == 'edit') {
  8. $page_title = LANG_MYPATCH_EDIT;
  9. $this->addBreadcrumb ($patch['description'], $this->href_to('patch', $patch['id']));
  10. }
  11.  
  12. $this->setPageTitle($page_title);
  13.  
  14. $this->addBreadcrumb($page_title);
  15. /*
  16.   $this->addToolButton(array(
  17.   'class' => 'save',
  18.   'title' => LANG_SAVE,
  19.   'href' => "javascript:icms.forms.submit()"
  20.   ));
  21. */
  22. $this->addToolButton(array(
  23. 'class' => 'cancel',
  24. 'title' => LANG_CANCEL,
  25. 'href' => $this->href_to('')
  26. ));
  27. /**/
  28.  
  29. ?>
  30.  
  31. <?php
  32. $this->renderForm($form, $patch, array(
  33. 'action' => '',
  34. 'metod' => 'post',
  35. 'toolbar' => false
  36. ), $errors);
  37.  
#23 23 июня 2014 в 14:56
Так вот — почему оно не выводит форму для заполнения поля "file" ?
При нажатии "добавить" — получаю вот что:
#24 23 июня 2014 в 15:00
Тоесть форму в переменную $form (как я понял из показаний xdebug) он вносит — а вот вывод формы в шаблон не происходит.
#25 23 июня 2014 в 15:53
причем если для теста заменить код шаблона вывода на этот:


  1.  
  2. <?php
  3.  
  4. // $this->addBreadcrumb(LANG_MYPATCH_CONTROLLER, $this->href_to(''));
  5.  
  6. if ($do == 'add') { $page_title = LANG_MYPATCH_ADD;}
  7. if ($do == 'edit') {
  8. $page_title = LANG_MYPATCH_EDIT;
  9. $this->addBreadcrumb ($patch['description'], $this->href_to('patch', $patch['id']));
  10. }
  11.  
  12. $this->setPageTitle($page_title);
  13.  
  14. $this->addBreadcrumb($page_title);
  15. /*
  16.   $this->addToolButton(array(
  17.   'class' => 'save',
  18.   'title' => LANG_SAVE,
  19.   'href' => "javascript:icms.forms.submit()"
  20.   ));
  21. */
  22. $this->addToolButton(array(
  23. 'class' => 'cancel',
  24. 'title' => LANG_CANCEL,
  25. 'href' => $this->href_to('')
  26. ));
  27. /**/
  28.  
  29. ?>
  30.  
  31.  
  32. <?php
  33. echo 'test';
  34. // $this->renderForm($form, $patch, array(
  35. // 'action' => '',
  36. // 'metod' => 'post',
  37. // 'toolbar' => false
  38. // ), $errors);
  39.  
чтобы вывести на месте формы слово "тест" — получаем тоже самое.
То есть вывод заканчивается на построении глубинометра а все что после него — игнорируется :(
#26 23 июня 2014 в 16:45
"ура — заработало!" © Простоквашино.
Нашел я в чем проблема:

в файле system\controllers\mypatch\backend\actions\add.php

меняем :
  1.  
  2. $template = cmsTemplate::getInstance();
  3.  
  4. $template->render('backend/patch', array(
  5. 'do' => 'add',
  6. 'form' => $form,
  7. 'patch' => $patch,
  8. 'errors' => $errors
  9. ));
  10.  
на
  1.  
  2.  
  3. return cmsTemplate::getInstance()->render('backend/patch', array(
  4. 'do' => 'add',
  5. 'form' => $form,
  6. 'patch' => $patch,
  7. 'errors' => $errors
  8. ));
  9.  
продолжаем "мучаться" дальше :)
#27 23 июня 2014 в 18:29
для первой ветки это тоже было бы полезно...
Не программисты со мной согласятся…
#28 23 июня 2014 в 18:46
Скорпион, советую глянуть на PHP manipulator

A helper library for analyzing and modifying PHP source files.

как ясно из названия умеет анализировать и программно модифицировать php файлы

т.е. можете сделать cms которая собирает сама себя по кусочкам 😊

в принципе, можно при желании и автотесты сделать — для наката патча, запуска cms и проверки результата. Но автотесты похоже будут в тройке...

но так как сайт на Инстанте обычно делает и ведет один и тот же человек — то это все и не нужно в принципе

а БД всех патчей — в связи с всплеском хаков для каждой версии Инстанта — думаю имела бы смысл
#29 23 июня 2014 в 20:22

а БД всех патчей — в связи с всплеском хаков для каждой версии Инстанта — думаю имела бы смысл

Крот
Именно это главная цель. И возможность в одно касание применить/отменить патч.
Я не собираюсь писать компонент "обновления" всей системы… поэтому и оставил для разработчиков имя контролера "patch"😊а застолбил для своего компонента имя "mypatch" — тоесть это небольшие хаки, которые помогут обывателю немного подправить код до выхода официального релиза.
#30 23 июня 2014 в 20:25

для первой ветки это тоже было бы полезно...

VopisUVD
Я конечно извиняюсь, но ориентируюсь пока только на двойку.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.