Информационная связь с потребителем, безусловно, реально стабилизирует социометрический рейтинг, не считаясь с затратами. Стиль менеджмента стабилизирует конвергентный анализ зарубежного опыта, оптимизируя бюджеты. Емкость рынка вырождена. Стратегический маркетинг, не меняя концепции, изложенной выше, основан на тщательном анализе данных.
А если серьёзно, это просто блог.
Тогда, возможно, Вы попали туда куда нужно.
Я занимаюсь созданием сайтов "под ключ".
Оцените качество работы, посмотрев
портфолио. Если Вы не рассчитываете на демпинг, связаться со мной можно при помощи формы обратной связи.
Создание модуля для MODx
В данном уроке будет рассказано как создать простой модуль для CMS, которую я считаю лучшей из существующих (в том числе из коммерческих). Я перепробывал очень много систем управления сайтом, также был опыт разработки собственной, но с тех пор как я узнал о MODx, у меня пропало желание создать свою собственную CMS, потаму что я понял, что создать что-то удобнее и универсальнее невозможно. Модуль который будет создан в этом уроке будет служить для заметок по типу записной книжки. Это совсем простой модуль (и не очень-то полезный), но его можно будет использывать как заготовку для создание других более сложных модулей.
Итак, для начала нам нужно создать пустой модуль в MODx. Идем в "Модули" → "Управление модулями". Жмем кнопку "Новый модуль", даем ему какое-то название, например "MODx Notes". Далее хорошо бы получить информацию о конфигурации системы для которой мы будем делать модуль. Выводим массив с конфигурационными данными:
echo "<pre>"; print_r($modx->config); echo "</рre>"; |
Создаем "переменные окружения", которые будем использовать в модуле (хотя по сути это константы, но не важно).
$dbname = $modx->db->config['dbase']; //имя базы данных $dbprefix = $modx->db->config['table_prefix']; //префикс таблиц $mod_table = $dbprefix."manager_notes"; //таблица модуля $theme = $modx->config['manager_theme']; //тема админки $basePath = $modx->config['base_path']; //путь до сайта на сервере |
Для передачи данных в модулях MODx удобнее всего использовать метод POST. Создадим форму со скрытыми полями и JavaScript-функцию для удобного переключения действий:
<script language="JavaScript" type="text/javascript"> function postForm(action, id){ document.module.action.value=action; if (id != null) document.module.item_id.value=id; document.module.submit(); } </script> <form name="module" method="post"> <input name="action" type="hidden" value="" /> <input name="item_id" type="hidden" value="" /> |
Эту конструкцию я подсмотрел здесь. Вот пример кнопки (ссылки) с данной JS-функцией:
<a href="#" onclick="postForm(\'install\',null);return false;">Установить модуль</a> |
Создаем конструкцию Switch и первое действие (создание таблицы в БД для модуля):
switch($action) { ////Установка модуля (создание таблицы в БД) case 'install': $sql = "CREATE TABLE $mod_table (id INT(11) NOT NULL AUTO_INCREMENT, title VARCHAR(255), description VARCHAR(255), PRIMARY KEY (id))"; $modx->db->query($sql); header("Location: $_SERVER[REQUEST_URI]"); break; } |
Дальнейшие мои пояснения, думаю бессмысленны, лучше приведу полный код модуля, из комментариев в котором, будет всё понятно:
/*********************************** * * http://wdevblog.net.ru * MODx Notes - простой модуль для MODx (заготовка) * ***********************************/ $dbname = $modx->db->config['dbase']; //имя базы данных $dbprefix = $modx->db->config['table_prefix']; //префикс таблиц $mod_table = $dbprefix."manager_notes"; //таблица модуля $theme = $modx->config['manager_theme']; //тема админки $basePath = $modx->config['base_path']; //путь до сайта на сервере echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <link rel="stylesheet" type="text/css" href="media/style/'.$theme.'/style.css" /> </head> <body> <br /> <div class="sectionHeader">Записная книжка</div> <div class="sectionBody"> <script language="JavaScript" type="text/javascript"> function postForm(action, id){ document.module.action.value=action; if (id != null) document.module.item_id.value=id; document.module.submit(); } </script> <form name="module" method="post"> <input name="action" type="hidden" value="" /> <input name="item_id" type="hidden" value="" /> '; $action = isset($_POST['action']) ? $_POST['action']:''; switch($action) { ////Установка модуля (создание таблицы в БД) case 'install': $sql = "CREATE TABLE $mod_table (id INT(11) NOT NULL AUTO_INCREMENT, title VARCHAR(255), description VARCHAR(255), PRIMARY KEY (id))"; $modx->db->query($sql); header("Location: $_SERVER[REQUEST_URI]"); break; ////Удаление таблицы модуля case "uninstall": $sql = "DROP TABLE $mod_table"; $modx->db->query($sql); header("Location: $_SERVER[REQUEST_URI]"); break; ////Добавление записи case 'add': if (!empty($_POST['item_id'])){//редактирование записи $data = mysql_fetch_array($modx->db->select("title, description", $mod_table, "id = $_POST[item_id]", "", "")); $id = $_POST['item_id']; $title = $data['title']; $description = $data['description']; $save = "update"; }else{//если запись новая $id = ''; $title = ''; $description = ''; $save = "save"; } echo ' Заголовок<br /><input type="text" name="title" value="'.$title.'" /><br /> Запись<br /><textarea name="description" cols="40" rows="5">'.$description.'</textarea><br /> <a href="#" onclick="postForm(\''.$save.'\',\''.$id.'\');return false;"><img src="media/style/'.$theme.'/images/icons/save.gif" align="absmiddle" />Сохранить</a> <a href="#" onclick="postForm(\'reload\',null);return false;"><img src="media/style/'.$theme.'/images/icons/cancel.gif" align="absmiddle" />Отмена</a> '; break; ////Сохранение записи в БД case 'save': $sql = "INSERT INTO $mod_table VALUES (NULL,'$_POST[title]','$_POST[description]')"; $modx->db->query($sql); header("Location: $_SERVER[REQUEST_URI]"); break; ////Обновление записи в БД case 'update': $fields = array( "title" => $_POST['title'], "description" => $_POST['description'] ); $query = $modx->db->update($fields, $mod_table, "id = ".$_POST['item_id'].""); header("Location: $_SERVER[REQUEST_URI]"); break; ////Перезагрузка страницы (сброс $_POST) case 'reload': header("Location: $_SERVER[REQUEST_URI]"); break; ////Удаление записи в БД case 'delete': $modx->db->delete($mod_table, "id = $_POST[item_id]"); header("Location: $_SERVER[REQUEST_URI]"); break; ////Страница модуля default: if (mysql_num_rows(mysql_query("show tables from $dbname like '$mod_table'"))==0){ //если таблицы не существует, выводим кнопку "Установить модуль" echo '<a href="#" onclick="postForm(\'install\',null);return false;">Установить модуль</a>'; }else{ //если же модуль уже установлен, выводим его echo ' </form> <a href="#" onclick="postForm(\'add\',null);return false;"><img src="media/style/'.$theme.'/images/icons/newdoc.gif" align="absmiddle" />Добавить</a> '; $data_query = $modx->db->select("*", $mod_table, "", "id ASC", ""); echo ' <br /><br /> <table width="98%" border="0" cellpadding="2" cellspacing="1" bgcolor="#707070"> <thead> <tr> <td><b>Заголовок</b></td> <td><b>Текст записи</b></td> <td><b></b></td> <td><b></b></td> </tr> <thead> <tbody> '; while ($data = mysql_fetch_array($data_query)){//выводим записи echo ' <tr bgcolor="#FFFFFF"> <td>'.$data["title"].'</td> <td>'.$data["description"].'</td> <td align="center"><a href="#" title="Редактировать" onclick="postForm(\'add\','.$data["id"].');return false;"><img src="media/style/'.$theme.'/images/icons/logging.gif" align="absmiddle" /></a></td> <td align="center"><a href="#" title="Удалить" onclick="if(confirm(\'Вы уверены?\')){postForm(\'delete\','.$data["id"].')};return false"><img src="media/style/'.$theme.'/images/icons/delete.gif" align="absmiddle" /></a></td> </tr>'; } echo ' </tbody> </table> <br /><br /> <a href="#" onclick="if(confirm(\'Вы уверены?\')){postForm(\'uninstall\',null)};return false;"><img src="media/style/'.$theme.'/images/icons/delete.gif" align="absmiddle" />Удалить все записи</a> '; } break; } echo ' </div> </body> </html> '; |
Для управления данными в БД я использовал в том числе и стандартные функции MODx. Для того чтобы было понятно как они работают обязательно посмотрите их полный код.
Для вывода на сайте данных, созданных в модуле, обычно используется плагин или сниппет. Возможно позже напишу и о них.

Написать комментарий
Ответов: 10
Ответ #10 дата : Thu June 03, 2010, 17:42:56
Ответов: 10
Ответ #9 дата : Sun March 14, 2010, 13:07:13
Ответов: 10
Ответ #8 дата : Thu February 25, 2010, 09:45:39
Ответов: 10
Ответ #7 дата : Mon February 08, 2010, 00:07:57