В прошлых статьях мы написали небольшой каркас для экспериментов с компонентом. По своей сути он самодостаточен, вы вольны делать в нем все. что считаете нужным. Но, как и в любом более менее серьезном проекте, вам не обойтись без построении бизнес логики, а она в свою очередь невозможна без использования хранилищ. Хранилищем номер один будут файлы. но они не удобны. Более удобна для хранения данных безусловно база данных. Обычно это база в 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 ...