Поэтому я нахожу это немного странным, потому что поле DB обновлялось без особых усилий с моей стороны, пока я не начал писать в функции загрузки файлов. Теперь база данных не обновляется, но загрузка файла работает. Казалось, что все вставляется, обновляется и т. Д. Просто отлично, просто указав собственные имена в XML-файле формы администратора:
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="course_id"type="hidden" />
<field
name="course_name"type="text"label="Course Name: "description="Full name of the course (up to 255 characters)"default="" />
<field
name="course_dept"type="text"label="Course Department: "description="4 character department code. Examples: BIOL, CREL, CHEM"default="" />
<field
name="course_code"type="text"label="Course Code: "description="4 digit course code which immediately preceeds department code"default="" />
<field
name="course_desc"type="textarea"label="Course Description: "rows="10"description="As seen in the academic calendar"default="" />
<field
name="course_graphic_url"type="file"label="Course Graphic: "description="Graphical representation of the course"accept="image/*" />
</fieldset>
</form>
Из того, что я прочитал, я должен написать логику обновления базы данных. Просто странно, что это работало раньше. Теперь я новичок в разработке компонентов для Joomla MVC, поэтому, возможно, я скопировал / вставил несколько строк кода, которые сделали бы это без моей реализации … Но я сомневаюсь в этом. Вот то, что я пытался, но я где-то терпит неудачу. Это /admin/controllers/course.php:
<?php defined('_JEXEC') or die;
jimport('joomla.application.component.controllerform');
class CourseListControllerCourse extends JControllerForm {
protected $view_list = 'CourseList';
function save($key = null, $urlVar = null){
// ---------------------------- Uploading the file ---------------------
// Neccesary libraries and variables
jimport( 'joomla.filesystem.folder' );
jimport('joomla.filesystem.file');
$jinput = JFactory::getApplication()->input;
$files = $jinput->files->get('jform');
$filename = $files['course_graphic_url']['name'];
$folder = JPATH_SITE . "/" . "images" . "/" . "courselist";
// Create the folder if not exists in images folder
if ( !JFolder::exists( $folder ) ) {
JFolder::create( $folder, 0777 );
}
$src = $files['course_graphic_url']['tmp_name'];
$dest = JPATH_SITE . "/" . "images" . "/" . "courselist" . "/" . $filename;
if (isset($files['course_graphic_url'])) {
JFile::upload( $src, $dest );
}
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$cid = $jinput->get('course_id');
$fields = array($db->quoteName('course_graphic_url') . " = " . $db->quote($dest));
$conditions = array($db->quoteName('course_id') . " = " . $cid);
$query
->update($db->quoteName('#__courselist'))->set($fields)->where($conditions);
$db->execute($query);
return parent::save($key = null, $urlVar = null);
}
}
Надеюсь, я предоставил достаточно информации … Я все еще застрял в режиме выходных, поэтому трудно сказать: P Заранее спасибо!
РЕДАКТИРОВАТЬ: Я понимаю, что course_id, переменная url, которая появляется, когда я нахожусь на странице редактирования, не пропускалась (насколько я могу судить) через нажатие кнопки сохранения. Я попытался создать скрытое поле ввода со значением, в надежде, что я исправлю все то, что неправильно в современном мире, но безуспешно.
Что странно для меня, так это то, что все остальные поля БД обновляются корректно, без дополнительного SQL. Соответствующее поле было обновлено значениями в соответствующих полях формы. Я НАСТОЯЩИЙ СМОТРЕТЬ ПРЯМО СЕЙЧАС.
Прежде всего, большое спасибо ВВП в Joomla! Обмен стеками, ведущий меня в правильном направлении. Я должен сказать, что проблема была довольно глупой. Как вы заметите в моем коде, я получаю объект запроса:
$query = $db->getQuery(true);
Я строю запрос:
$fields = array($db->quoteName('course_graphic_url') . " = " . $db->quote($dest));
$conditions = array($db->quoteName('course_id') . " = " . $cid);
$query
->update($db->quoteName('#__courselist'))->set($fields)->where($conditions);
Я, однако, не устанавливаю объект запроса !!!! Вот недавно добавленный код. Что за дурачок: P
$db->setQuery($query);
$db->execute($query);
Других решений пока нет …