В прошлых статьях мы написали небольшой каркас для экспериментов с компонентом. По своей сути он самодостаточен, вы вольны делать в нем все. что считаете нужным. Но, как и в любом более менее серьезном проекте, вам не обойтись без построении бизнес логики, а она в свою очередь невозможна без использования хранилищ. Хранилищем номер один будут файлы. но они не удобны. Более удобна для хранения данных безусловно база данных. Обычно это база в MySQL сервере. Про работу с ней и поговорим в этой статье.
Работа с БД в joomla поставлена не самым удобным образом. К примеру, чтобы выдернуть несколько строк из таблицы, нужно сделать несколько манипуляций
$db = JFactory::getDBO(); $db->setQuery('select * from #_tablaname'); $rows = $db->loadAssocList();
Вы заметили jml_ в названии таблицы, эту подстроку Joomla автоматически заменит на префикс базы. который прописан в конфигурационном файле. Это очень удобно, и рекомендую делать именно так.
но это еще не самый худший пример. При вставке и обновлении записей, кода будет еще больше.
$db = JFactory::getDBO(); $query = $db->getQuery(true); $query ->insert($db->quoteName('jml_tablename')) ->columns('name,value') ->values(implode(',', array("'vasya'","'poppkin'")); $db->setQuery($query); $db->query() $db->insertid();
Страшное дело. Обновление записей происходит по тому же принципу.
$db = JFactory::getDBO(); $query = $db->getQuery(true); $obj = new stdclass(); $query ->update($db->quoteName('jml_tablename')) ->where('id=4'); $array = array('name'=>'vova'); foreach($array as $key=>$value){ $query->set($db->quoteName($key).'="'.$value.'"'); } $db->setQuery($query); $db->query();
И наконец удаление
$db = JFactory::getDBO(); $query = $db->getQuery(true); $query ->delete($db->quoteName('jml_tablename')) ->where(array('id=5','region=6','`pos`=2 and `name`='.$db-.quote('vasya').'')); $db->setQuery($query); $db->query();
Не сильно все это удобно, но ничего не поделаешь. хотя нет, вру. Поделаешь. Для своих нужд я написал класс, который облегчает выполнение всех этих повседневных операций. Однажды попробовав ее, Вам уже не захочется использовать ничего другого. Это как с компьютерными креслами. Привыкнув к одному компьютерному креслу, тяжело садится на другое.
С ней эти операции значительно упрощаются операции
Выборка нескольких строк
uno::getRows('tablename',array('`name`='.uno::escape('vasya')));
Вставка записи
uno::insert('tablename',array('name'=>'vasya'));
обновление записи
uno::update('tablename',array('name'=>'vasya'),array('name='.uno::_('vasya')))
Гораздо удобнее, вы согласны?
Создание компонента Joomla с нуля
- Создание компонента Joomla с нуля. Часть 1
- Создание компонента Joomla с нуля. Часть 2. PHP файл
- Создание компонента Joomla с нуля. Часть 3. Создаем установочный файл
- Создание компонента Joomla с нуля. Часть 4. Использование БД
- Создание компонента Joomla с нуля. Часть 5. Роутинг
- Создание компонента Joomla с нуля. Часть 6. Использование шаблонов
- Создание компонента Joomla с нуля. Часть 7 CRUD в контроллере
Комментарии
defined( '_JEXEC') or die('Restricted access');
то пишет Class JFactory was not ...