Создаем компонент — пятница, 29 октября 2010-го

Работа с меню

Просмотров: 1033

В колонках звучит: Only The Good Die Young

Примерный вид нашей страницы:

Внешний вид администраторской части компонента

Сначала инициализируем некоторые глобальные переменные Joomla:


global $database, $mosConfig_list_limit;

 $database – для возможности работы с базой данных; $mosConfig_list_limit – переменная хранит количество элементов отображаемых на странице по умолчанию (при использовании постраничной навигации).

Чтобы использовать постраничную навигацию:

Панель постраничной навигации

нужно определить переменные: $limit, $limitstart, $total. $limit – количество элементов на странице, $limitstart – элемент с которого начинается отображение элементов на текущей странице, $total – количество элементов на всех страницах.

Значения этих переменных будут передаваться скрипту методом POST (так мы указали выше, когда описывали форму).


 


echo '<form name="adminForm" method="POST" action="index2.php">';


 

Для получения данных, переданных скрипту используется функция mosGetParam. Она берет значения переданных переменных из суперглобального массива $_REQUEST. По умолчанию обрезает лишние пробелы в начале и конце, а также вычищает HTML код из текста. Используем её следующим способом:


  


$limit = intval( mosGetParam( $_REQUEST, 'limit', $mosConfig_list_limit ) );


$limitstart = intval( mosGetParam( $_REQUEST, 'limitstart', 0 ) );


$filter_user = intval( mosGetParam( $_REQUEST, 'filter_user', 0 ) );



 

$_REQUEST - суперглобальный массив переданный в скрипт; второй параметр имя поля значение, которого мы передавали скрипту (Например, <input type=”textname=”namevalue=”0”> ); третий параметр значение, которое должна принять переменная если значение поля передано не было (значение по умолчанию).

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


  

		1.    _MOS_NOTRIM не обрезать пробелы
	
		2.    _MOS_ALLOWHTML – разрешитm HTML
	
		3.  _MOS_ALLORAW - не обрабатывать (т.е. текст даже с HTML и JavaScript)
	


 

Значение переменной $total мы можем определить только обратившись к базе данных. Что мы и делаем:


 

		$query = "SELECT COUNT(*)"
	
		             ."\n FROM mdo_message";
	
		$database->setQuery( $query );
	
		$total = $database->loadResult();
	


 

Когда все переменные инициализированы, нужно создать объект класса mosPageNav. Для этого: 


  

		require_once($GLOBALS['mosConfig_absolute_path'].
	
		                 '/administrator/includes/pageNavigation.php' );
	
		$pageNav = new mosPageNav( $total, $limitstart, $limit ); 
	

		
	


 

т.е. включаем в скрипт файл pageNavigation.php, в котором и находится описание класса mosPageNav. Ну и непосредственно создаем объект с параметрами, которые инициализировали раньше.

Далее нужно получить данные, которые будут отображаться в таблице. Нужно получить $limit строк , начиная с $limitstart строки:


  


$query = "SELECT m.*, u.name, u.username"


                       . "\n FROM mdo_message AS m "


                       . "\n LEFT JOIN #__users AS u ON u.id = m.id_user";


$database->setQuery( $query, $pageNav->limitstart, $pageNav->limit );


$rows = $database->loadObjectList();


		
	


 

Теперь объект $rows содержит требуемые данные осталось отобразить их.

Переходим к визульной части. Сначала отобразим заголовок (это лишь декоративный элемент).

 

Заголовок таблицы


  


<table class="adminheading">


                       <tr>


                                    <th>


                                               Доска объявлений


                                   </th>              


                       </tr>


            </table>


		
	


 

Далее должна идти таблица, оформленная в том же стиле, что и все таблицы в админ-панели. Здесь я приведу весь код, который отображает нужную нам таблицу с данными. Далее поясню некоторые моменты:


  


<table class="adminlist">


<tr>


                        <th width="20">


                                   #


                        </th>


                        <th width="20">


                                   <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $rows ); ?>);" />


                        </th>


                        <th align="left" nowrap="nowrap">


                                   Сообщение


                        </th>


                        <th width="20%" nowrap="nowrap">


                                   Создатель


                        </th>


                        <th width="11%" nowrap="nowrap">


                                   Начало показа


                        </th>


                        <th width="11%" nowrap="nowrap">


                                    Конец показа


                        </th>


            </tr>


<?php


            $k = 0;


            for ($i=0, $n=count($rows);$i<$n;$i++)


            {


                        $row = $rows[$i];


                        mosMakeHtmlSafe($row);


                        $row->id = $row->id_message;


                        $checked         = mosCommonHTML::CheckedOutProcessing( $row, $i );


           


?>


            <tr class="<?php echo "row$k"; ?>">


                        <td align="center">


                                   <?php echo $pageNav->rowNumber( $i ); ?>


                        </td>


                        <td align="center">


                                   <?php echo $checked; ?>


                        </td>


                        <td>


                                   <?php echo $row->message; ?>


                        </td>


                        <td align="center">


                                   <?php echo $row->name.'('.$row->username.')'; ?>


                        </td>


                        <td>


                                   <?=date("Y-m-d H:i:s", $row->start_date)?>


                        </td>


                        <td>


                                   <?=date("Y-m-d H:i:s", $row->end_date)?>


                        </td>


            </tr>   


<?php 


                        $k = 1 - $k;


            }


?>

</table>

		
	


 

mosMakeHtmlSafe($row); - функция которая проверят нет ли HTML кода, если есть вырежет его.


		
	


 


$row->id = $row->id_message;


            $checked = mosCommonHTML::CheckedOutProcessing( $row, $i );



 

- функция создает код для отображения checkbox`а (значение параметра value = $row->id, значение параметра id = “cb”.$i. Например: <input type="checkbox" id="cb1" name="cid[]" value="2" onclick="isChecked(this.checked);" />)


		
	


 


<tr class="<?php echo "row$k"; ?>">


          




 

- используем класс row$k, для того чтобы фон выводимых строк чередовался (темный - светлый - темный). Переменная $k в конце цикла меняет своё значение (если была 0, то станет 1 и наоборот).


		
	


 


<?=date("Y-m-d H:i:s", $row->start_date)?>


          


- так как в нашей таблице даты хранятся в формате timestamp, поэтому для преобразования в удобочитаемы вид применяем функцию date.

И, наконец, выводим панель навигации.


		
	


 


<?php  echo $pageNav->getListFooter(); ?>


          


И определяем скрытое поле


		
	


 


<input type="hidden" name="boxchecked" value="0" />


          


которое требуется для операций с checkbox`ами.

Теперь привожу полный вид файла admin.myboard.php:

Файл admin.myboard.php .

Используя этот файл изменить компонент, и проверьте на работоспособность. Не забудьте добавить данные в таблицу mdo_message. Желательно чтобы данные были верные, т.е. id пользователя указывался не от балды, а такой какой указан в таблице #__users.

На первой картинке в правом верхнем углу вы могли заметить список:

Панель администратора, фильтрация

Этот список сделан для фильтрации по автору объявления. Чтобы реализовать фильтрацию добавим некоторые строки в код написанный нами ранее.


		
	


 


$filter_user = intval( mosGetParam( $_REQUEST, 'filter_user', 0 ) ); - после описания переменных $limit, $limitstart.


          


За этой предыдущей строчкой вставляем:


		
	


 


 


$filter[0]='';


            $filter[1]='';


            if ($filter_user!=0)


            {


                        $filter[0]="\n WHERE u.id=$filter_user";


                        $filter[1]="\n WHERE id_user=$filter_user";






             }


          


- для того чтобы в зависимости от значения переменной $filter_user можно было отсеивать ненужные записи. Если $filter_user равно 0 (фильтр не определен), то изменений в запросах не будет.

Далее изменяем запросы следующим образом:


		
	


 


 


$query = "SELECT COUNT(*)"

                                . "\n FROM     mdo_message";


          


Заменяем на:


		
	


 


 


                        $query = "SELECT COUNT(*)"


                                . "\n FROM     mdo_message"





                                .$filter[1];
          


 


		
	


 


$query = "SELECT m.*, u.name, u.username"


                                    . "\n FROM mdo_message AS m "


                                    . "\n LEFT JOIN #__users AS u ON u.id = m.id_user";



          


Заменяем на:


		
	


 


 


                        $query = "SELECT m.*, u.name, u.username"


                                   . "\n FROM mdo_message AS m "


                                   . "\n LEFT JOIN #__users AS u ON u.id = m.id_user"


                                   .$filter[0];


  




После инициализации объекта $rows:


		
	


 


 


$query = "SELECT u.id, u.name FROM mdo_message AS m "


                        ."\n LEFT JOIN #__users AS u ON u.id=m.id_user"


                        ."\n GROUP BY u.id";


$authors[] = mosHTML::makeOption( '0', _SEL_AUTHOR, 'id', 'name' );                


                        $database->setQuery( $query );


                        $authors = array_merge( $authors, $authors = $database->loadObjectList());


                        $lists['authorid']            = mosHTML::selectList( $authors, 'filter_user', 'class="inputbox" size="1" onchange="document.adminForm.submit( );"', 'id', 'name', $filter_user);





          


И, наконец, изменяем заголовок (таблицу которая выводит - моя доска объявлений) на:


		
	


 


 


<table class="adminheading">


            <tr>


                        <th>


                                   Доска объявлений


                       </th>              


                       <td align="right">


                                      <?php // echo $lists['authorid']; ?>


                       </td>


            </tr>


            </table>






          


Все создание списка объявлений закончено. Теперь снова проверяем работоспособность компонента.

В результате получился следующий файл admin.myboard.php  

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

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

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

(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



(обязательно)