Форум русской поддержки Joomla!® CMS
27.06.2017, 21:36:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

В каком файле осуществлять удаление файлов?

 (Прочитано 146 раз)
0 Пользователей и 1 Гость смотрят эту тему.
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1188


желаю вам счастья


« : 15.06.2017, 17:19:50 »

Здравствуйте!

Разрабатываю простой компонент, который по клику по нему в админке должен будет удалить файлы в разных директориях и связанные с ними строки в БД. Информация о ненужных файлах первоначально берется из БД в дефолтном view.html.php. Вопрос, в каком файле(ах) компонента правильно делать эти операции? Объясните, пожалуйста.
« Последнее редактирование: 15.06.2017, 18:28:44 от borro » Записан
Тренд
Осваиваюсь на форуме
***

Репутация: +6/-0
Offline Offline

Сообщений: 59


« Ответ #1 : 15.06.2017, 18:22:58 »

Ну сразу как там посылаете базе запрос "DELETE..." следующей строкой сразу unlink.
В классическом варианте это делается в View - здесь должна происходить манипуляция данными.
Но всегда бывают нюансы.
Записан
b2z
Support Team
*****

Репутация: +734/-0
Offline Offline

Пол: Мужской
Сообщений: 7725


Разраблю понемногу


« Ответ #2 : 15.06.2017, 18:24:28 »

В классическом варианте это делается в View - здесь должна происходить манипуляция данными.
What? Может имели ввиду Model?
Записан
SeBun
Практически профи
*******

Репутация: +181/-5
Offline Offline

Пол: Мужской
Сообщений: 3019



« Ответ #3 : 15.06.2017, 18:32:14 »

В классическом варианте это делается в View - здесь должна происходить манипуляция данными
Вид предназначен для отображения, а не для манипуляции.

ТС, посмотрите еще раз принципы MVC-программирования. На ваш вопрос ответ один - Model. Контроллер - это связующее звено между моделлю и видом. Он получает данные от пользователя, передает их модели, получает обработанный результат и передает его в представление.
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1188


желаю вам счастья


« Ответ #4 : 15.06.2017, 18:42:24 »

Вот текущий view.html.php дефолтного вида, который вызывается по клику на компонент в админке:
Код:
<?php
defined("_JEXEC") or die();

class Vm3delpicsViewDelete extends JViewLegacy{
protected $data;
public function display($tpl = null){
$this->data = $this->get('Download');
$this->addToolBar();
parent::display($tpl);
}
...
}
?>
В $this->data кладется информация из БД о файлах на удаление
1. Получается, чтобы удалить строки из БД надо после $this->get('Download') написать вызов метода модели вроде:
Код:
$this->get('Delete');
?
2. А как быть с удалением файлов, писать код в этой же public function display()? Это же не дело модели
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +373/-4
Offline Offline

Пол: Мужской
Сообщений: 2806



« Ответ #5 : 15.06.2017, 18:49:26 »

Удалять файлы и данные нужно в модели!
Только не дергают это через вид, это извращение!
Делаете всё это через контроллер!
Я бы даже сделал удаление файлов через контроллер, а работа с базой в модели!

Например вы передаете задачу index.php?option=com_your_component&task=controllerName.delete

В контроллере добавляете метод
publick function delete(){
тут можно стукнуться в модель через: $this->getModel()->getFiles($param1, $param2...); (модель должна иметь имя как и контроллер)
}
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +373/-4
Offline Offline

Пол: Мужской
Сообщений: 2806



« Ответ #6 : 15.06.2017, 18:53:35 »

Более подробный пример
файл controllers/pics.php:
Код
class Vm3delpicsControllerPics extends JControllerLegacy
{
  public function delete(){
     //получаем файлы
     $files = $this->getModel()->getFiles();
     print_r($files);
  }
}
 


файл: models/pics.php
Код
class Vm3delpicsModelPics extends JControllerLegacy
{
  public function getFiles(){
     return ['test.jpg', 'temp.png', 'blablabla.gif'];
  }
}
 

и вызывать index.php?option=com_vm3delpics&task=pics.delete
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1188


желаю вам счастья


« Ответ #7 : 17.06.2017, 15:31:46 »

Здравствуйте.
Спасибо!
Пока перевариваю и разбираюсь ...

Тем временем возник вопрос. Как записать примерно такой запрос на языке Joomla правильно:
Код:
$db = JFactory::getDbo();
$query = $db->getQuery(TRUE);
$query->select('`virtuemart_media_id`,`file_title`,`file_url`,`published`');
$query->from('#__virtuemart_medias m');
$query->where('file_type = \'product\'
AND NOT EXISTS(SELECT virtuemart_media_id FROM #__virtuemart_product_medias WHERE virtuemart_media_id = m.virtuemart_media_id )');
Здесь похоже я неправильно оформил NOT EXISTS... А как правильно добавить такой EXISTS, используя методы $query?
Хотя, простите, вроде работает Azn
« Последнее редактирование: 17.06.2017, 15:55:03 от borro » Записан
SeBun
Практически профи
*******

Репутация: +181/-5
Offline Offline

Пол: Мужской
Сообщений: 3019



« Ответ #8 : 17.06.2017, 16:13:08 »

запрос на языке Joomla

Нет такого языка. Есть язык PHP. В Joomla есть свои классы. Один из них - JFactory. В нем вы используете метод getDBO для запроса. Запрос - простая текстовая строка. Можете ее написать целиком и вызвать метод, например так:
Код
$result=$db->setQuery($query);

где $query содержит строку запроса. И это сработает. А можно (и нужно) использовать методы построения запроса, как делаете вы. Здесь все разжовано и разложено по полочкам, почитайте.
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1188


желаю вам счастья


« Ответ #9 : 19.06.2017, 17:03:28 »

Здравствуйте!

Позвольте приложить текущую версию компонента и задать вопрос. В компоненте есть представление(вид) delete. Панель кнопок для него формируется в том числе строкой(файл \admin\views\delete\view.html.php в архиве):
Код:
JToolBarHelper::deleteList(JText::_("COM_VM3DELPICS_ADMIN_NOTHING_TO_DELETE"),'delete.deleteSelected');
Когда выбираешь элемент из списка, который надо удалить, в модальном окне всплывает сообщение, которое стоит за константой COM_VM3DELPICS_ADMIN_NOTHING_TO_DELETE, то есть сообщается что ничего не выбрано. При этом элементы списка с помощью чекбоксов в браузере проставляются, но когда затем нажимаешь на эту самую кнопку "Удалить", создаваемую JToolBarHelper::deleteList... , всплывает модальное окно.
Почему Joomla не видит элементы списка, выделяемые на удаление?

* com_vm3delpics.zip (14.63 Кб - загружено 0 раз.)
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet