Разработан модуль для joomla для открытого института. Модуль размещён на странице информации о специальности и выводит перечень изучаемых дисциплин по заданной специальности.
Для выбора перечня дисциплин требуется получить из url страницы алиас специальности.
Файловая структура
mod_disciplines
— директория модуля на сервере.- tmpl
default.php
— шаблон модуля, который принимает данные, собранныеmod_disciplines.php
и генерирует HTML, который будет отображаться на странице.
helper.php
— файл содержит вспомогательный класс, используемый для того, чтобы сделать фактическую работу в получении информации, которая будет отображаться в модуле.mod_disciplines.php
— основной файл входа для модуля, который выполняет необходимые процедуры инициализации, вызова вспомогательных средств для сбора данных и содержит шаблон для отображения вывода модуля.mod_disciplines.xml
— файл содержит информацию о модуле и определяет файлы, которые должны быть установлены установщиком Joomla! Так же данный файл задает параметры конфигурации модуля.
- tmpl
Исходный код
tmpl/default.php
PHP
<?php
// No direct access
defined( '_JEXEC' ) or die;
$err_special = [];
$option = [];
$option['driver'] = 'mysql';
$option['host'] = '';
$option['user'] = '';
$option['password'] = '';
$option['database'] = '';
$option['prefix'] = '';
/*
print '<pre>';
print_r($_GET);
print '</pre>';
*/
$db = & JDatabase::getInstance( $option );
$query_specialties_list = $db->getQuery(true);
$query_specialties_list -> select('s.special_id, s.title');
$query_specialties_list -> from($db->quoteName('specialties', 's'));
$query_specialties_list -> where($db->quoteName('special_status') ." = 'Опубликована'");
$db -> setQuery( $query_specialties_list );
$specialties_list = $db->loadObjectList();
if( !isset( $_GET["special_id"] ) ) {
$err_special[] = 'Специальность не указана.';
}
if( count( $err_special ) == 0 ) {
$query_specialties = $db->getQuery(true);
$query_specialties -> select('s.special_id, s.title');
$query_specialties -> from($db->quoteName('specialties', 's'));
$query_specialties -> where( $db->quoteName('special_id') ." = ". $_GET["special_id"] );
$query_specialties -> where($db->quoteName('special_status') ." = 'Опубликована'");
$db -> setQuery( $query_specialties, 0, 1 );
$specialties = $db->loadObjectList();
}
if( count( $specialties ) > 0 ) {
$special_id = $_GET["special_id"];
$special_title = $specialties[0]->title;
} else {
$err_special[] = 'Специальность не найдена.';
}
if( count( $err_special ) == 0 ) {
$query_disciplines = $db->getQuery(true);
$query_disciplines -> select('d.discipline_id, d.discipline_name, s.specialtie_comment');
$query_disciplines -> from($db->quoteName('disciplines', 'd'));
$query_disciplines -> join('LEFT OUTER', $db->quoteName('specialtie_to_disciplines', 's') . ' ON (' . $db->quoteName('d.discipline_id') . ' = ' . $db->quoteName('s.discipline_id') . ')');
$query_disciplines -> where($db->quoteName('special_id')." = ". $db->quote($special_id));
$db -> setQuery($query_disciplines);
$disciplines = $db->loadObjectList();
} else {
$query_disciplines = $db->getQuery(true);
$query_disciplines -> select('std.discipline_id, d.discipline_name');
$query_disciplines -> from($db->quoteName('specialtie_to_disciplines', 'std'));
$query_disciplines -> join('LEFT OUTER', $db->quoteName('disciplines', 'd') . ' ON (' . $db->quoteName('std.discipline_id') . ' = ' . $db->quoteName('d.discipline_id') . ')');
$query_disciplines -> join('LEFT OUTER', $db->quoteName('specialties', 's') . ' ON (' . $db->quoteName('std.special_id') . ' = ' . $db->quoteName('s.special_id') . ')');
$query_disciplines -> where($db->quoteName('s.special_status')." = 'Опубликована'");
$query_disciplines -> group($db->quoteName('std.discipline_id'));
$query_disciplines -> order($db->quoteName('d.discipline_name'));
$db -> setQuery($query_disciplines);
$disciplines = $db->loadObjectList();
}
print '<div class="module'. $moduleclass_sfx .'">';
print '<div class="form-group">';
print '<label>Выберите направление подготовки</label>';
print '<select name="special_id" class="form-control setTrainingDisciplinesSpecialId">';
print '<option value="0">Все направления подготовки</option>';
foreach( $specialties_list AS $special_in_list ) {
$selected = '';
if( $special_in_list->special_id == $_GET["special_id"] ) $selected = 'selected';
print '<option value="'. $special_in_list->special_id .'" '. $selected .'>'. $special_in_list->title .'</option>';
}
print '</select>';
print '</div>';
if ( isset( $special_title ) ) {
print '<div class="h1 text-center">ООП «'. $special_title .'»</div>';
print '<div class="text-center tab-heading">';
print '<h3 class="disciplins-list">Тематические планы учебных дисциплин:</h3>';
print '<span class="label label-required-part"> </span> Обязательная часть';
print '<span class="label label-variational-part"> </span> Вариативная часть';
print '<span class="label label-elective-disciplines"> </span> Дисциплины по выбору';
print '</div>';
print '<ul class="tags" style=" list-style: none; ">';
foreach ( $disciplines AS $i1 => $discipline ) {
$label = '';
if ( $discipline->specialtie_comment == "Обязательная часть" ) $label = 'required-part';
if ( $discipline->specialtie_comment == "Вариативная часть" ) $label = 'variational-part';
if ( $discipline->specialtie_comment == "Дисциплины по выбору" ) $label = 'elective-disciplines';
## Количество разделов
$query_disciplines_sections = $db->getQuery(true);
$query_disciplines_sections -> select('ds.sections_id');
$query_disciplines_sections -> from($db->quoteName('disciplines_sections', 'ds'));
$query_disciplines_sections -> where($db->quoteName('discipline_id')." = ". $db->quote($discipline->discipline_id));
$db -> setQuery($query_disciplines_sections);
$db->execute();
$col_sections = $db->getNumRows();
## Количество тем
$query_sections_topics = $db->getQuery(true);
$query_sections_topics -> select('st.topics_id');
$query_sections_topics -> from($db->quoteName('sections_topics', 'st'));
$query_sections_topics -> join('LEFT OUTER', $db->quoteName('disciplines_sections', 'ds') . ' ON (' . $db->quoteName('st.sections_id') . ' = ' . $db->quoteName('ds.sections_id') . ')');
$query_sections_topics -> where($db->quoteName('discipline_id')." = ". $db->quote($discipline->discipline_id));
$db -> setQuery($query_sections_topics);
$db->execute();
$col_topics = $db->getNumRows();
## Количество занятий
$query_lessons = $db->getQuery(true);
$query_lessons -> select('l.lesson_id');
$query_lessons -> from($db->quoteName('lessons', 'l'));
$query_lessons -> join('LEFT OUTER', $db->quoteName('specialtie_to_disciplines', 'std') . ' ON (' . $db->quoteName('l.to_discipline_id') . ' = ' . $db->quoteName('std.to_discipline_id') . ')');
$query_lessons -> where($db->quoteName('std.discipline_id')." = ". $db->quote($discipline->discipline_id));
$query_lessons -> where($db->quoteName('std.special_id')." = ". $db->quote($special_id));
$query_lessons -> where($db->quoteName('l.lesson_hours')." > 0 ");
$db -> setQuery($query_lessons);
$db->execute();
$col_lessons = $db->getNumRows();
print '<li>';
print '<a href="https://sdo.openvuz.org/components/sections_topics/view/ThemePlan.php?discipline_id='. $discipline->discipline_id .'" target="_blank" class="label label-'. $label .'">'. $discipline->discipline_name .'</a> <small class="text-primary">(Разделов: '. $col_sections .'. Тем: '. $col_topics .'. Занятий: '. $col_lessons .')</small>';
print '</li>';
}
print '</ul>';
} else {
print '<ul class="tags" style=" list-style: none; ">';
$label = '';
foreach ( $disciplines AS $i1 => $discipline ) {
## Количество разделов
$query_disciplines_sections = $db->getQuery(true);
$query_disciplines_sections -> select('ds.sections_id');
$query_disciplines_sections -> from($db->quoteName('disciplines_sections', 'ds'));
$query_disciplines_sections -> where($db->quoteName('discipline_id')." = ". $db->quote($discipline->discipline_id));
$db -> setQuery($query_disciplines_sections);
$db->execute();
$col_sections = $db->getNumRows();
## Количество тем
$query_sections_topics = $db->getQuery(true);
$query_sections_topics -> select('st.topics_id');
$query_sections_topics -> from($db->quoteName('sections_topics', 'st'));
$query_sections_topics -> join('LEFT OUTER', $db->quoteName('disciplines_sections', 'ds') . ' ON (' . $db->quoteName('st.sections_id') . ' = ' . $db->quoteName('ds.sections_id') . ')');
$query_sections_topics -> where($db->quoteName('discipline_id')." = ". $db->quote($discipline->discipline_id));
$db -> setQuery($query_sections_topics);
$db->execute();
$col_topics = $db->getNumRows();
print '<li>';
print '<a href="https://sdo.openvuz.org/components/sections_topics/view/ThemePlan.php?discipline_id='. $discipline->discipline_id .'" target="_blank" class="label label-elective-disciplines">'. $discipline->discipline_name .'</a> <small class="text-primary">(Разделов: '. $col_sections .'. Тем: '. $col_topics .'.)</small>';
print '</li>';
}
print '</ul>';
}
print '</div>';
helper.php
PHP
<?php
// No direct access
defined( '_JEXEC' ) or die;
/**
* Class Module Helper
* @author alvasdem
*/
class modDisciplinesHelper
{
/**
* getData method
* @param $params
* @return array
*/
static function getData( $params )
{
$db = JFactory::getDbo();
return array();
}
}
mod_disciplines.php
PHP
<?php
// No direct access
defined( '_JEXEC' ) or die;
require_once( dirname( __FILE__ ) . '/helper.php' );
$data = modDisciplinesHelper::getData( $params );
$moduleclass_sfx = htmlspecialchars( $params->get( 'moduleclass_sfx' ) );
// $special_id = htmlspecialchars( $params->get( 'special_id' ) );
require( JModuleHelper::getLayoutPath( 'mod_disciplines', $params->get( 'layout', 'default' ) ) );
mod_disciplines.xml
XML
<?xml version="1.0"?>
<extension type="module" version="1.0.0" method="upgrade" client="site">
<name>Перечень дисциплин</name>
<author>alvasdem</author>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<copyright></copyright>
<license></license>
<version>1.0</version>
<description></description>
<files>
<filename module="mod_disciplines">mod_disciplines.php</filename>
<filename>index.html</filename>
<filename>helper.php</filename>
<folder>tmpl</folder>
</files>
<languages>
<language tag="en-GB">language/en-GB.mod_disciplines.ini</language>
<language tag="en-GB">language/en-GB.mod_disciplines.sys.ini</language>
<language tag="ru-RU">language/ru-RU.mod_disciplines.ini</language>
<language tag="ru-RU">language/ru-RU.mod_disciplines.sys.ini</language>
</languages>
<config>
<fields name="params">
<fieldset name="advanced">
<field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL"
description="JFIELD_ALT_MODULE_LAYOUT_DESC"/>
<field name="moduleclass_sfx" type="text" label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"
description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC"/>
<field name="cache" type="list" label="COM_MODULES_FIELD_CACHING_LABEL"
description="COM_MODULES_FIELD_CACHING_DESC" default="1">
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
<option value="1">JGLOBAL_USE_GLOBAL</option>
</field>
</fieldset>
</fields>
</config>
</extension>