Вы здесь: Статьи Статьи по Joomla! Создаем компонент «Моя доска объявлений» - II - Оптимизация кода
Сообщение
  • Ошибка в процессе загрузки файла

Создаем компонент «Моя доска объявлений» - II - Оптимизация кода

Индекс материала
Создаем компонент «Моя доска объявлений» - II
Учимся делать запросы в БД
Реакция на нажатие кнопок
Оптимизация кода
Редактирование сообщений
Все страницы

Шаг девятый. Удаление сообщений. Небольшая оптимизация кода.

На этом шаге мы напишем реакцию на нажатие кнопки Удалить.

Для того чтобы удалить какие-то сообщения нужно: 1- отметить соответствующие чекбоксы, 2 – нажать кнопку Удалить.

Заметим, что после удаления сообщений должен снова появиться список сообщений (естественно обновившийся). Чтобы не писать один и тот же код несколько раз мы создадим функцию show_mess(), которая будет отображать нам список сообщений, с возможностью фильтрации и постраничной навигацией (т.е. все сделанное нами в 6 шаге).

Итак в файле admin.myboard.php в конце файла (но перед ?>) пишем следующее:

 
function show_mess()
{
}
 

Далее весь код написанный в предыдущем шаге, т.е. код расположенный в секции default конструкции switch ($task), вырезаем и вставляем в функцию show_mess(). Должно получиться вот так:

 
function show_mess()
{
//Сюда  вставляем наш скопированный код
}
 

Теперь, в каждом месте, где нам надо вывести вышеупомянутый список (таблицу), мы будем вставлять код:

 
show_mess();
 

Так как мы уже, сейчас можем сказать, где должны отображаться сообщения, вставим в нужные места вызов, созданной нами функции.

Привожу фрагмент кода:

 
......................
switch ($act)
{
case "view_mess": 
{
switch  ($task)
{
case "edit":
echo 'Редактирование сообщения';
break;
case "remove":
echo(‘Удаление сообщений ’);
show_mess();
break;
case "cancel":
echo 'Отмена редактирования сообщения';
show_mess();
break;
case "save":
echo 'Сохраниение сообщения';
show_mess();
break;
default:
show_mess();
break;
}
}
break;
default:
echo 'Выбран пункт наша доска';
show_mess();
break;
}
......................................
 

Сделав изменения, проверим как работает компонент. Если все нормально, то на нажатие всех кнопок тулбара кроме Изменить, результатом будет отображение соответствующего сообщения и списка объявлений.

После того как вы могли наглядно убедиться, что использование функций более приемлимо, приступим к созданию функции удаляющей выбранные сообщения (в будущем мы проведем еще одну, более крупную оптимизацию – будем создавать классы и т.д.) Для того чтобы реализовать удаление сообщений создадим функцию delete_mess(). Прокомментируем основные моменты.

Функция должна получить список идентификаторов сообщений, которые были выделены пользователем. Для этого в самом начале (после <?php) файла admin.mybord.php поместим следующий код:

 
$cid = josGetArrayInts( 'cid' );
 

Функция josGetArrayInts возвращает в переменную $cid массив переданный скрипту, так как мы использовали при создании списка сообщений стандартные средства Joomla, то все чекбоксы были названы (параметр name) cid[]. Таким образом скрипту был передан массив cid. Также можно использовать и функцию mosGetParam:

$cid = mosGetParam( $_REQUEST, 'cid', 0 );

Для удаления сообщений больше не нужно никакой информации поэтому пишем собственно саму функцию:

 
function  delete_mess($cid)
{
global $database;
$flag = true;
for ($i=0;$i<count($cid);$i++)
{
$query = "DELETE FROM  mdo_message".
"\n WHERE id_message=".$cid[$i];
$database->setQuery($query);
if  (!$database->query())
{
$flag=false;
}
}
if  ($flag) {echo("Удаление успешно");}
else {echo("В одном из запросов произошла ошибка");
}
 

В функции мы просматриваем массив $cid и удаляем из базы те записи, которые удовлетворяют равенству id_message=$cid[$i]( все сообщения идентификаторы которых были переданы в массиве $cid).

Переменная $flag используется для того, чтобы выяснить, все ли запросы на удаление были выполнены. Если хоть один запрос не выполнен, то будет выведено соответствующее сообщение.

Теперь имея на руках функцию нужно вызвать ее в нужном месте:

 
switch ($act)
{
case "view_mess": 
{
switch ($task)
{
case "edit":
echo 'Редактирование сообщения';
break;
case "remove":
delete_mess($cid);
//Не забываем передать функции  параметр &ndash; массив $cid
show_mess();
break;
case "cancel":
echo 'Отмена редактирования  сообщения';
show_mess();
break;
case "save":
echo 'Сохраниение сообщения';
show_mess();
break;
default:
show_mess();
break;
}
}
break;
default:
echo 'Выбран пункт наша доска';
show_mess();
break;
}
 

Снова проверяем работоспособность компонента. Если все нормально, то переходим к следующему шагу. На следующем шаге мы рассмотрим редактирование сообщений и напишем соответствующую функцию.

Вариант файла admin.myboard.php  на данном шаге

Важно: очень важно проводить тщательное тестирование на наличие ошибок, проверяйте все возможные случаи использования пользователем вашего компонента.



Комментарии  

Коммент от
Июл 11, 2009
Комментатор
Alika
0 ???? Не работают ссылки на следующие части статьи:
- Создание пустых файлов
- Редактирование файла myboard.xml
- Панель управления компонентом
- Все страницы

Не, ну я так не играю :sad:
система ругается и говорит, что нету-ть продолжения у статей. Может лучшн не разбивать их на страницы, а выложить просто разными частями?
Коммент от
Июл 12, 2009
Комментатор
Aleks_El_Dia
0 Починил ссылки. Дело было в одном непроверенном плагине (каюсь, не протестировал перед установкой). Продолжения работают, читайте на здоровье :-)
Коммент от
Июл 12, 2009
Комментатор
Alika
0 Спасибо! Сейчас же все и прочту :-)

Оставить комментарий

Защитный код
Обновить

Популярные файлы

1.
Компонент Миграции с Joomla! 1.0.x на Joomla! 1.5.x
2106
2.
Хак постраничной навигации сайта на CMS Joomla!
883
3.
Дополнительное изменяемое поле "Телефон"
514

Последние комментарии

  • повторюсь - очень очень надо для 1.5 )) Ну и спаси... Подробнее..
    От Илюха
  • Так введите это имя и пароль/мыло админа и заканч... Подробнее..
    От Aleks_El_Dia
  • делал, делал, миграция прошла успешно, жму далее -... Подробнее..
    От Вася