Разработка каталога мультимедийных программных ресурсов
Условия использования Интернет-приложений в мультимедийных процессах. Анализ имеющихся аналогов Web-каталогов разработки мультимедийных программных ресурсов. Разработка структуры Web-приложения с учетом особенностей мультимедийного процесса "GrowTo".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 26.05.2018 |
Размер файла | 3,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Недостаточная нагрузка влияет и на кровообращение в суставе. В результате питание костной ткани нарушается, формирование суставного хряща, покрывающего головку и суставную впадину сочленяющихся костей, да и самой кости идет неправильно, что приводит к различным заболеваниям. Но дело не ограничивается только этим. Нарушение кровообращения может привести к неравномерному росту костной ткани, вследствие чего возникает разрыхление одних участков и уплотнение других. Форма костей в результате этого может стать неправильной, а сустав потерять подвижность.
Рис. 9 Гиподинамия и влияние ее на здоровье человека
Гиподинамия - это слабость мышечных тканей, возникающая из-за крайне малой двигательной активности. Современному человеку доступны все блага цивилизации: автомобили, магазины на каждом шагу, сидячая работа, интернет. Все это, конечно, хорошо, но проблема в том, что для человеческого организма малоподвижный образ жизни - смерти подобно. Ведь самой природой заложено, что мы должны много и активно двигаться.
С другой стороны, не стоит думать, что если делать каждый день по 50 отжиманий или по 100 раз качать пресс, то для тела этого будет достаточно. Дело в том, что когда мышцы постоянно работают в одном и том же режиме, ежедневно выполняют одинаковые действия (допустим, вы каждый день поднимаетесь на 12 этаж пешком), то такая ограниченность движений тоже в итоге приведет к гиподинамии.
Как распознать гиподинамию?
1. Если ваши мышцы недостаточно часто сокращаются, то, по задумке природы, «ненужные» органы атрофируются. Конечно, на это требуется время, поэтому, как только вы заметили, что простые действия (например, пройти пешком два квартала), вызывают у вас одышку и боли в ногах, нужно бить тревогу - гиподинамия рядом! Ведь гиподинамия и здоровье человека неразрывно связаны.
2. Если ваш вес непрерывно растет, это значит, что организм не получает необходимой физической активности. А калории, запасаемые им для мышечной нагрузки, вместо этого превращаются в жир. При этом замедляется обмен веществ, и формы «расползаются» еще быстрее.
3. Вас постоянно тянет к холодильнику, хотя, казалось бы, ужин был не так давно? Вы удивитесь, но это тоже косвенный признак гиподинамии. Дело в том, что когда человек достаточно много двигается, то жиры расщепляются и попадают в кровь, поддерживая в ней нужный уровень сахара. Поэтому вы не будете чувствовать голода, а съесть захочется ровно столько, сколько нужно организму для нормальной жизнедеятельности. Если же движения мало, то уровень сахара быстро падает, в результате человек слабеет и пытается компенсировать недостаток сил с помощью поглощения жирных и сладких продуктов.
Гиподинамия и ее последствия
В течение всей жизни на человека оказывают влияние самые разнообразные факторы внешней и внутренней среды. Их огромное количество. Однако, несмотря на большое количество, все эти факторы можно ранжировать в порядке их значимости. Для здоровья. Это сделала Всемирная Организация Здравоохранения. Из 200 основных выделенных факторов, которые оказывают самое значительное влияние на человека, первые четыре места занимают гиподинамия (недостаток движения), неправильное питание (и, прежде всего, избыточный вес), вредные привычки (потребление алкоголя, наркотиков и других веществ) и неблагоприятная экологическая обстановка.
Существующая система образования не только не способствует улучшению здоровья учащихся, но и зачастую требует огромного количества движений для своего развития, не менее 50-60% времени в режиме дня должно отводиться двигательной активности.
Вместе с тем, потребность в движении у учащейся молодежи самостоятельными движениями удовлетворяется только на 8-20%.
Многочисленные исследования показывают, что существующая система физического воспитания и программа не способствуют гармоничному развитию детей и подростков и требуют совершенствования, новых решений, оптимального воздействия всех форм, средств и методов с целью сохранения и укрепления здоровья учащихся.
К заболеваниям, связанным с гипокинезией, относятся сердечно-сосудистые, нервные, желудочно-кишечные расстройства, костные, мышечные и хрящевые изменения и др.
Как же бороться с гиподинамией?
Как видите, влияние гиподинамии на человека достаточно сильно и пагубно для него. Но бороться с ней можно и нужно. Главные враги гиподинамии - регулярные и разнообразные физические нагрузки. О том, что необходимы каждодневная зарядка и ходьба пешком, вы, наверное, уже догадались. Но есть еще одно эффективное средство против этого недуга - изометрическая гимнастика (ее еще называют «карманной»). Эти упражнения удобны тем, что почти незаметны посторонним, а потому их можно делать где угодно. Кроме того, они основаны на сильном напряжении мышц, и повторяя их всего раз в день, можно быть уверенной, что необходимая мышечная нагрузка получена. Итак, вот они:
- Вытяните руки, упритесь полусогнутыми пальцами в поверхность стола. Сильно вдохнув, на выдохе бережно, но сильно вдавите пальцы в стол. Давить нужно примерно 5-6 секунд, после чего расслабиться. Отдохнув 30 секунд, снова проделайте упражнение.
- Подсуньте руки под стол и тыльной стороной ладоней с силой толкайте крышку стола вверх. Толкать нужно 5-6 секунд, через полминуты повторить.
- Сцепив ладони сзади на шее, старайтесь нагнуть ее вперед, при этом сопротивляясь всеми мышцами шеи. «Боритесь» 10 секунд, через 30 секунд повторите.
- Сядьте на стул, обхватите ногами его ножки и, напрягаясь, сожмите ноги как можно сильнее. Сжимайте по 10 секунд через каждые полминуты.
- Сцепите кисти вытянутых рук в замок, и, не сгибая рук, пытайтесь разомкнуть их. После полуминутного отдыха повторите.
Как видите, профилактика гиподинамии довольно проста, и, соблюдая эти несложные рекомендации, вы очень скоро сможете попрощаться с эти недугом.
4.2 Организация рабочего места, оснащенного компьютером
Научно-технический прогресс внес серьезные изменения в условия производственной деятельности работников умственного труда. Их труд стал более интенсивным, напряженным, требующим значительных затрат умственной, эмоциональной и физической энергии. Это потребовало комплексного решения проблем эргономики, гигиены и организации труда, регламентации режимов труда и отдыха.
В настоящее время компьютерная техника широко применяется во всех областях деятельности человека. При работе с компьютером человек подвергается воздействию ряда опасных и вредных производственных факторов: электромагнитных полей (диапазон радиочастот: ВЧ, УВЧ и СВЧ), инфракрасного и ионизирующего излучений, шума и вибрации, статического электричества и др.
Работа с компьютером характеризуется значительным умственным напряжением и нервно-эмоциональной нагрузкой операторов, высокой напряженностью зрительной работы и достаточно большой нагрузкой на мышцы рук при работе с клавиатурой ЭВМ. Большое значение имеет рациональная конструкция и расположение элементов рабочего места, что важно для поддержания оптимальной рабочей позы человека-оператора.
В процессе работы с компьютером необходимо соблюдать правильный режим труда и отдыха. В противном случае у персонала отмечаются значительное напряжение зрительного аппарата с появлением жалоб на неудовлетворенность работой, головные боли, раздражительность, нарушение сна, усталость и болезненные ощущения в глазах, в пояснице, в области шеи и руках.
Большое значение имеет также характер работы. В частности, при организации рабочего места программиста должны быть соблюдены следующие основные условия: оптимальное размещение оборудования, входящего в состав рабочего места и достаточное рабочее пространство, позволяющее осуществлять все необходимые движения и перемещения.
Главными элементами рабочего места программиста являются стол и кресло. Основным рабочим положением является положение сидя.
Рабочая поза сидя вызывает минимальное утомление программиста. Рациональная планировка рабочего места предусматривает четкий порядок и постоянство размещения предметов, средств труда и документации. То, что требуется для выполнения работ чаще, расположено в зоне легкой досягаемости рабочего пространства.
Размещено на http://www.allbest.ru/
При оборудовании рабочего места необходимо установить монитор на специальном столике так, чтобы задняя панель была обращена к стене (так как около нее зарегистрирован максимальный уровень напряженности электрического поля), экран не должен располагаться напротив окна или других прямых источников света, дающих блики на экране.
Рис. 11 Рекомендуемое положение во время работы за компьютером
Стол, на котором устанавливается монитор, должен быть достаточной длины, чтобы расстояние до экрана составляло 60-70 (не ближе 50) см, и в то же время можно было работать с клавиатурой в непосредственной близости от пользователя (30-40 см). Конструкция рабочей мебели (столы, кресла, стулья) должна обеспечивать возможность индивидуальной регулировки соответственно росту работающего и создавать удобную позу. Часто используемые предметы труда должны находится в оптимальной рабочей зоне, на одном расстоянии от глаз работающего. На поверхности рабочего стола необходимо разместить подставку для документов, расстояние которой от глаз должно быть аналогичным расстоянию от глаз до клавиатуры. Рабочее кресло должно иметь подлокотники. На рабочем месте необходимо предусмотреть подставку для ног.
Для того чтобы устранить блики на экране, монитор должен быть установлен перпендикулярно столу, а пользователь должен смотреть на экран несколько сверху вниз (10° от горизонтальной линии).
Условия освещенности в комнате играют большую роль в сохранении зрительного комфорта. С одной стороны, ничто не должно мешать восприятию информации с экрана, с другой - пользователь должен хорошо видеть клавиатуру, бумажные тексты, которыми приходится пользоваться, а также общую обстановку и людей, с которыми приходится общаться при работе.
Рис. 12 Удобное рабочее место с "Г-образным" столом
Общая освещенность в комнате не должна быть слишком большой, но и не слишком малой, она должна быть в пределах 300-500 люкс. Если помещение светлое, то окна должны иметь шторы или жалюзи. Рабочие места пользователей дисплеев желательно не располагать непосредственно у окон. Во всех случаях экран монитора следует ориентировать так, чтобы он не давал бликов, а именно - под углом к окну, близким к прямому. Искусственное освещение не должно быть слишком ярким. Но помимо общих ламп, освещающих комнату, необходима местная яркая (не менее 60 Вт) лампа с хорошим плотным абажуром, освещающая только текст, с которым работает пользователь. Она должна иметь возможность ориентации в разных направлениях и быть оснащена устройством для регулирования яркости. Лампы накаливания предпочтительнее люминесцентных, т.к. последние дают пульсирующий свет, в определенных условиях усиливающий мерцание экрана дисплея.
А) Линия взора параллельна окну(рекомендуется)Б) Яркий свет в поле зрения(не рекомендуется)
Рис. 13 Расположение монитора относительно окна
А) Отражение света лампы от поверхности стола и клавиатуры (не рекомендуется)
Б) Блик от лампы на экране монитора (не рекомендуется)
Рис. 14 Расположение источника искусственного освещения относительно монитора
Рис. 15 Правильное расположение монитора относительно стены и источника света
Перед началом работы с монитором необходимо установить с помощью рукояток наиболее комфортные контрастность и яркость на экране. Они подбираются индивидуально, так как слишком низкая контрастность и высокая яркость могут приводить к быстрому утомлению.
При подборе светового режима на рабочем месте пользователя дисплея необходимо учитывать то, что у лиц после 40 лет возникают возрастные изменения в зрительной системе (сужение зрачка, пожелтение хрусталика, снижение зрительной активности и контрастной чувствительности сетчатки). Все это требует усиления яркости экрана и дополнительной освещенности рабочего места (бумажного текста). У молодых лиц при зрительно-напряженной работе наибольшую нагрузку несет аккомодационная система глаза, которая во время работы находится в постоянном напряжении. Это может приводить к астенопическим явлениям, возникновению нарушений в аккомодационной системе глаза.
У взрослых с близорукостью, которые постоянно носят очки, другие очки для работы с компьютером необходимы только в том случае, если в своих очках пользователь с трудом читает газетный шрифт с расстояния 60-70 см (до экрана) и 30-33 см (до печатного текста) от глаз. В случае если с одними и теми же линзами чтение с обоих расстояний невозможно, назначают бифокальные очки.
Заключение
В результате выполнения данной выпускной квалификационной работы были решены следующие задачи:
· Проделан анализ существующих аналогов каталога мультимедийных программных ресурсов
· Разработан алгоритм формирования каталога мультимедийных программных ресурсов.
· Разработаны функциональная, организационная структуры каталога
· Создана база данных, а также полнотекстовая база данных с электронным каталогом
· Создан каталог мультимедийных программных ресурсов
В результате анализа существующих каталогов мультимедийных программных ресурсов была выявлена одна из наиболее распространенных ошибок и эта ошибка была устранена в нашем проекте. В данной работе сайт больше обращен на электронный каталог.
Литература
1. Постановление Президента Республики Узбекистан от 20 июня 2006 г. Об организации информационно-библиотечного обеспечения населения республики // Маърифат. 2006. 21 июнь.
2. Указ президента республики Узбекистан О дальнейшем развитии компьютеризации и внедрении информационно-коммуникационных технологий, 30 мая 2002 г. // Тошкент о?шоми. 2002. 10 июнь.
3. С. Айзекс «Dynamic html. Секреты создания интерактивных веб-страниц».
4. Д. Альховник « Уроки по html для начинающих».
5. Николай Прохоренко «Html. Java Script. Php, MySQL».
6. Информационно-поисковый ресурс http://google.ru/.
7. Информационно-справочный ресурс http://wikipedia.org/.
8. http://w3schools.com/.
9. http://metanit.com/.
10. Документация по php.
11. Документация по drupal.
Приложение (программный код)
<?php
/**
* @file
* The PHP page that serves all page requests on a Drupal installation.
*
* The routines here dispatch control to the appropriate handler, which then
* prints the appropriate page.
*
* All Drupal code is released under the GNU General Public License.
* See COPYRIGHT.txt and LICENSE.txt.
*/
/**
* Root directory of Drupal installation.
*/
define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT. '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
menu_execute_active_handler();
<?php
/**
* @file
* The theme system, which controls the output of Drupal.
*
* The theme system allows for nearly all output of the Drupal system to be
* customized by user themes.
*/
/**
* @defgroup content_flags Content markers
* @{
* Markers used by theme_mark() and node_mark() to designate content.
* @see theme_mark(), node_mark()
*/
/**
* Mark content as read.
*/
define('MARK_READ', 0);
/**
* Mark content as being new.
*/
define('MARK_NEW', 1);
/**
* Mark content as being updated.
*/
define('MARK_UPDATED', 2);
/**
* @} End of "Content markers".
*/
/**
* Determines if a theme is available to use.
*
* @param $theme
* Either the name of a theme or a full theme object.
*
* @return
* Boolean TRUE if the theme is enabled or is the site administration theme;
* FALSE otherwise.
*/
function drupal_theme_access($theme) {
if (is_object($theme)) {
return _drupal_theme_access($theme);
}
else {
$themes = list_themes();
return isset($themes[$theme]) && _drupal_theme_access($themes[$theme]);
}
}
/**
* Helper function for determining access to a theme.
*
* @see drupal_theme_access()
*/
function _drupal_theme_access($theme) {
$admin_theme = variable_get('admin_theme');
return !empty($theme->status) || ($admin_theme && $theme->name == $admin_theme);
}
/**
* Initialize the theme system by loading the theme.
*/
function drupal_theme_initialize() {
global $theme, $user, $theme_key;
// If $theme is already set, assume the others are set, too, and do nothing
if (isset($theme)) {
return;
}
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
$themes = list_themes();
// Only select the user selected theme if it is available in the
// list of themes that can be accessed.
$theme = !empty($user->theme) && drupal_theme_access($user->theme) ? $user->theme: variable_get('theme_default', 'bartik');
// Allow modules to override the theme. Validation has already been performed
// inside menu_get_custom_theme(), so we do not need to check it again here.
$custom_theme = menu_get_custom_theme();
$theme = !empty($custom_theme) ? $custom_theme: $theme;
// Store the identifier for retrieving theme settings with.
$theme_key = $theme;
// Find all our ancestor themes and put them in an array.
$base_theme = array();
$ancestor = $theme;
while ($ancestor && isset($themes[$ancestor]->base_theme)) {
$ancestor = $themes[$ancestor]->base_theme;
$base_theme[] = $themes[$ancestor];
}
_drupal_theme_initialize($themes[$theme], array_reverse($base_theme));
// Themes can have alter functions, so reset the drupal_alter() cache.
drupal_static_reset('drupal_alter');
// Provide the page with information about the theme that's used, so that a
// later Ajax request can be rendered using the same theme.
// @see ajax_base_page_theme()
$setting['ajaxPageState'] = array(
'theme' => $theme_key,
'theme_token' => drupal_get_token($theme_key),
);
drupal_add_js($setting, 'setting');
}
/**
* Initialize the theme system given already loaded information. This
* function is useful to initialize a theme when no database is present.
*
* @param $theme
* An object with the following information:
* filename
* The.info file for this theme. The 'path' to
* the theme will be in this file's directory. (Required)
* owner
* The path to the.theme file or the.engine file to load for
* the theme. (Required)
* stylesheet
* The primary stylesheet for the theme. (Optional)
* engine
* The name of theme engine to use. (Optional)
* @param $base_theme
* An optional array of objects that represent the 'base theme' if the
* theme is meant to be derivative of another theme. It requires
* the same information as the $theme object. It should be in
* 'oldest first' order, meaning the top level of the chain will
* be first.
* @param $registry_callback
* The callback to invoke to set the theme registry.
*/
function _drupal_theme_initialize($theme, $base_theme = array(), $registry_callback = '_theme_load_registry') {
global $theme_info, $base_theme_info, $theme_engine, $theme_path;
$theme_info = $theme;
$base_theme_info = $base_theme;
$theme_path = dirname($theme->filename);
// Prepare stylesheets from this theme as well as all ancestor themes.
// We work it this way so that we can have child themes override parent
// theme stylesheets easily.
$final_stylesheets = array();
// Grab stylesheets from base theme
foreach ($base_theme as $base) {
if (!empty($base->stylesheets)) {
foreach ($base->stylesheets as $media => $stylesheets) {
foreach ($stylesheets as $name => $stylesheet) {
$final_stylesheets[$media][$name] = $stylesheet;
}
}
}
}
// Add stylesheets used by this theme.
if (!empty($theme->stylesheets)) {
foreach ($theme->stylesheets as $media => $stylesheets) {
foreach ($stylesheets as $name => $stylesheet) {
$final_stylesheets[$media][$name] = $stylesheet;
}
}
}
// And now add the stylesheets properly
foreach ($final_stylesheets as $media => $stylesheets) {
foreach ($stylesheets as $stylesheet) {
drupal_add_css($stylesheet, array('group' => CSS_THEME, 'every_page' => TRUE, 'media' => $media));
}
}
// Do basically the same as the above for scripts
$final_scripts = array();
// Grab scripts from base theme
foreach ($base_theme as $base) {
if (!empty($base->scripts)) {
foreach ($base->scripts as $name => $script) {
$final_scripts[$name] = $script;
}
}
}
// Add scripts used by this theme.
if (!empty($theme->scripts)) {
foreach ($theme->scripts as $name => $script) {
$final_scripts[$name] = $script;
}
}
// Add scripts used by this theme.
foreach ($final_scripts as $script) {
drupal_add_js($script, array('group' => JS_THEME, 'every_page' => TRUE));
}
$theme_engine = NULL;
// Initialize the theme.
if (isset($theme->engine)) {
// Include the engine.
include_once DRUPAL_ROOT. '/'. $theme->owner;
$theme_engine = $theme->engine;
if (function_exists($theme_engine. '_init')) {
foreach ($base_theme as $base) {
call_user_func($theme_engine. '_init', $base);
}
call_user_func($theme_engine. '_init', $theme);
}
}
else {
// include non-engine theme files
foreach ($base_theme as $base) {
// Include the theme file or the engine.
if (!empty($base->owner)) {
include_once DRUPAL_ROOT. '/'. $base->owner;
}
}
// and our theme gets one too.
if (!empty($theme->owner)) {
include_once DRUPAL_ROOT. '/'. $theme->owner;
}
}
if (isset($registry_callback)) {
_theme_registry_callback($registry_callback, array($theme, $base_theme, $theme_engine));
}
}
/**
* Get the theme registry.
*
* @param $complete
* Optional boolean to indicate whether to return the complete theme registry
* array or an instance of the ThemeRegistry class. If TRUE, the complete
* theme registry array will be returned. This is useful if you want to
* foreach over the whole registry, use array_* functions or inspect it in a
* debugger. If FALSE, an instance of the ThemeRegistry class will be
* returned, this provides an ArrayObject which allows it to be accessed
* with array syntax and isset(), and should be more lightweight
* than the full registry. Defaults to TRUE.
*
* @return
* The complete theme registry array, or an instance of the ThemeRegistry
* class.
*/
function theme_get_registry($complete = TRUE) {
// Use the advanced drupal_static() pattern, since this is called very often.
static $drupal_static_fast;
if (!isset($drupal_static_fast)) {
$drupal_static_fast['registry'] = &drupal_static('theme_get_registry');
}
$theme_registry = &$drupal_static_fast['registry'];
// Initialize the theme, if this is called early in the bootstrap, or after
// static variables have been reset.
if (!is_array($theme_registry)) {
drupal_theme_initialize();
$theme_registry = array();
}
$key = (int) $complete;
if (!isset($theme_registry[$key])) {
list($callback, $arguments) = _theme_registry_callback();
if (!$complete) {
$arguments[] = FALSE;
}
$theme_registry[$key] = call_user_func_array($callback, $arguments);
}
return $theme_registry[$key];
}
/**
* Set the callback that will be used by theme_get_registry() to fetch the registry.
*
* @param $callback
* The name of the callback function.
* @param $arguments
* The arguments to pass to the function.
*/
function _theme_registry_callback($callback = NULL, array $arguments = array()) {
static $stored;
if (isset($callback)) {
$stored = array($callback, $arguments);
}
return $stored;
}
/**
* Get the theme_registry cache; if it doesn't exist, build it.
*
* @param $theme
* The loaded $theme object as returned by list_themes().
* @param $base_theme
* An array of loaded $theme objects representing the ancestor themes in
* oldest first order.
* @param $theme_engine
* The name of the theme engine.
* @param $complete
* Whether to load the complete theme registry or an instance of the
* ThemeRegistry class.
*
* @return
* The theme registry array, or an instance of the ThemeRegistry class.
*/
function _theme_load_registry($theme, $base_theme = NULL, $theme_engine = NULL, $complete = TRUE) {
if ($complete) {
// Check the theme registry cache; if it exists, use it.
$cached = cache_get("theme_registry:$theme->name");
if (isset($cached->data)) {
$registry = $cached->data;
}
else {
// If not, build one and cache it.
$registry = _theme_build_registry($theme, $base_theme, $theme_engine);
// Only persist this registry if all modules are loaded. This assures a
// complete set of theme hooks.
if (module_load_all(NULL)) {
_theme_save_registry($theme, $registry);
}
}
return $registry;
}
else {
return new ThemeRegistry('theme_registry:runtime:'. $theme->name, 'cache');
}
}
/**
* Write the theme_registry cache into the database.
*/
function _theme_save_registry($theme, $registry) {
cache_set("theme_registry:$theme->name", $registry);
}
/**
* Force the system to rebuild the theme registry; this should be called
* when modules are added to the system, or when a dynamic system needs
* to add more theme hooks.
*/
function drupal_theme_rebuild() {
drupal_static_reset('theme_get_registry');
cache_clear_all('theme_registry', 'cache', TRUE);
}
/**
* Builds the run-time theme registry.
*
* Extends DrupalCacheArray to allow the theme registry to be accessed as a
* complete registry, while internally caching only the parts of the registry
* that are actually in use on the site. On cache misses the complete
* theme registry is loaded and used to update the run-time cache.
*/
class ThemeRegistry Extends DrupalCacheArray {
/**
* Whether the partial registry can be persisted to the cache.
*
* This is only allowed if all modules and the request method is GET. theme()
* should be very rarely called on POST requests and this avoids polluting
* the runtime cache.
*/
protected $persistable;
/**
* The complete theme registry array.
*/
protected $completeRegistry;
function __construct($cid, $bin) {
$this->cid = $cid;
$this->bin = $bin;
$this->persistable = module_load_all(NULL) && $_SERVER['REQUEST_METHOD'] == 'GET';
$data = array();
if ($this->persistable && $cached = cache_get($this->cid, $this->bin)) {
$data = $cached->data;
}
else {
// If there is no runtime cache stored, fetch the full theme registry,
// but then initialize each value to NULL. This allows offsetExists()
// to function correctly on non-registered theme hooks without triggering
// a call to resolveCacheMiss().
$data = $this->initializeRegistry();
if ($this->persistable) {
$this->set($data);
}
}
$this->storage = $data;
}
/**
* Initializes the full theme registry.
*
* @return
* An array with the keys of the full theme registry, but the values
* initialized to NULL.
*/
function initializeRegistry() {
$this->completeRegistry = theme_get_registry();
return array_fill_keys(array_keys($this->completeRegistry), NULL);
}
public function offsetExists($offset) {
// Since the theme registry allows for theme hooks to be requested that
// are not registered, just check the existence of the key in the registry.
// Use array_key_exists() here since a NULL value indicates that the theme
// hook exists but has not yet been requested.
return array_key_exists($offset, $this->storage);
}
public function offsetGet($offset) {
// If the offset is set but empty, it is a registered theme hook that has
// not yet been requested. Offsets that do not exist at all were not
// registered in hook_theme().
if (isset($this->storage[$offset])) {
return $this->storage[$offset];
}
elseif (array_key_exists($offset, $this->storage)) {
return $this->resolveCacheMiss($offset);
}
}
public function resolveCacheMiss($offset) {
if (!isset($this->completeRegistry)) {
$this->completeRegistry = theme_get_registry();
}
$this->storage[$offset] = $this->completeRegistry[$offset];
if ($this->persistable) {
$this->persist($offset);
}
return $this->storage[$offset];
}
public function set($data, $lock = TRUE) {
$lock_name = $this->cid. ':'. $this->bin;
if (!$lock || lock_acquire($lock_name)) {
if ($cached = cache_get($this->cid, $this->bin)) {
// Use array merge instead of union so that filled in values in $data
// overwrite empty values in the current cache.
$data = array_merge($cached->data, $data);
}
else {
$registry = $this->initializeRegistry();
$data = array_merge($registry, $data);
}
cache_set($this->cid, $data, $this->bin);
if ($lock) {
lock_release($lock_name);
}
}
}
}
/**
* Process a single implementation of hook_theme().
*
* @param $cache
* The theme registry that will eventually be cached; It is an associative
* array keyed by theme hooks, whose values are associative arrays describing
* the hook:
* - 'type': The passed-in $type.
* - 'theme path': The passed-in $path.
* - 'function': The name of the function generating output for this theme
* hook. Either defined explicitly in hook_theme() or, if neither 'function'
* nor 'template' is defined, then the default theme function name is used.
* The default theme function name is the theme hook prefixed by either
* 'theme_' for modules or '$name_' for everything else. If 'function' is
* defined, 'template' is not used.
* - 'template': The filename of the template generating output for this
* theme hook. The template is in the directory defined by the 'path' key of
* hook_theme() or defaults to $path.
* - 'variables': The variables for this theme hook as defined in
* hook_theme(). If there is more than one implementation and 'variables' is
* not specified in a later one, then the previous definition is kept.
* - 'render element': The renderable element for this theme hook as defined
* in hook_theme(). If there is more than one implementation and
* 'render element' is not specified in a later one, then the previous
* definition is kept.
* - 'preprocess functions': See theme() for detailed documentation.
* - 'process functions': See theme() for detailed documentation.
* @param $name
* The name of the module, theme engine, base theme engine, theme or base
* theme implementing hook_theme().
* @param $type
* One of 'module', 'theme_engine', 'base_theme_engine', 'theme', or
* 'base_theme'. Unlike regular hooks that can only be implemented by modules,
* each of these can implement hook_theme(). _theme_process_registry() is
* called in aforementioned order and new entries override older ones. For
* example, if a theme hook is both defined by a module and a theme, then the
* definition in the theme will be used.
* @param $theme
* The loaded $theme object as returned from list_themes().
* @param $path
* The directory where $name is. For example, modules/system or
* themes/bartik.
*
* @see theme()
* @see _theme_process_registry()
* @see hook_theme()
* @see list_themes()
*/
function _theme_process_registry(&$cache, $name, $type, $theme, $path) {
$result = array();
// Processor functions work in two distinct phases with the process
// functions always being executed after the preprocess functions.
$variable_process_phases = array(
'preprocess functions' => 'preprocess',
'process functions' => 'process',
);
$hook_defaults = array(
'variables' => TRUE,
'render element' => TRUE,
'pattern' => TRUE,
'base hook' => TRUE,
);
// Invoke the hook_theme() implementation, process what is returned, and
// merge it into $cache.
$function = $name. '_theme';
if (function_exists($function)) {
$result = $function($cache, $type, $theme, $path);
foreach ($result as $hook => $info) {
// When a theme or engine overrides a module's theme function
// $result[$hook] will only contain key/value pairs for information being
// overridden. Pull the rest of the information from what was defined by
// an earlier hook.
// Fill in the type and path of the module, theme, or engine that
// implements this theme function.
$result[$hook]['type'] = $type;
$result[$hook]['theme path'] = $path;
// If function and file are omitted, default to standard naming
// conventions.
if (!isset($info['template']) && !isset($info['function'])) {
$result[$hook]['function'] = ($type == 'module' ? 'theme_': $name. '_'). $hook;
}
if (isset($cache[$hook]['includes'])) {
$result[$hook]['includes'] = $cache[$hook]['includes'];
}
// If the theme implementation defines a file, then also use the path
// that it defined. Otherwise use the default path. This allows
// system.module to declare theme functions on behalf of core.include
// files.
if (isset($info['file'])) {
$include_file = isset($info['path']) ? $info['path']: $path;
$include_file.= '/'. $info['file'];
include_once DRUPAL_ROOT. '/'. $include_file;
$result[$hook]['includes'][] = $include_file;
}
// If the default keys are not set, use the default values registered
// by the module.
if (isset($cache[$hook])) {
$result[$hook] += array_intersect_key($cache[$hook], $hook_defaults);
}
// The following apply only to theming hooks implemented as templates.
if (isset($info['template'])) {
// Prepend the current theming path when none is set.
if (!isset($info['path'])) {
$result[$hook]['template'] = $path. '/'. $info['template'];
}
}
// Allow variable processors for all theming hooks, whether the hook is
// implemented as a template or as a function.
foreach ($variable_process_phases as $phase_key => $phase) {
// Check for existing variable processors. Ensure arrayness.
if (!isset($info[$phase_key]) || !is_array($info[$phase_key])) {
$info[$phase_key] = array();
$prefixes = array();
if ($type == 'module') {
// Default variable processor prefix.
$prefixes[] = 'template';
// Add all modules so they can intervene with their own variable
// processors. This allows them to provide variable processors even
// if they are not the owner of the current hook.
$prefixes += module_list();
}
elseif ($type == 'theme_engine' || $type == 'base_theme_engine') {
// Theme engines get an extra set that come before the normally
// named variable processors.
$prefixes[] = $name. '_engine';
// The theme engine registers on behalf of the theme using the
// theme's name.
$prefixes[] = $theme;
}
else {
// This applies when the theme manually registers their own variable
// processors.
$prefixes[] = $name;
}
foreach ($prefixes as $prefix) {
// Only use non-hook-specific variable processors for theming hooks
// implemented as templates. See theme().
if (isset($info['template']) && function_exists($prefix. '_'. $phase)) {
$info[$phase_key][] = $prefix. '_'. $phase;
}
if (function_exists($prefix. '_'. $phase. '_'. $hook)) {
$info[$phase_key][] = $prefix. '_'. $phase. '_'. $hook;
}
}
}
// Check for the override flag and prevent the cached variable
// processors from being used. This allows themes or theme engines to
// remove variable processors set earlier in the registry build.
if (!empty($info['override '. $phase_key])) {
// Flag not needed inside the registry.
unset($result[$hook]['override '. $phase_key]);
}
elseif (isset($cache[$hook][$phase_key]) && is_array($cache[$hook][$phase_key])) {
$info[$phase_key] = array_merge($cache[$hook][$phase_key], $info[$phase_key]);
}
$result[$hook][$phase_key] = $info[$phase_key];
}
}
// Merge the newly created theme hooks into the existing cache.
$cache = $result + $cache;
}
// Let themes have variable processors even if they didn't register a template.
if ($type == 'theme' || $type == 'base_theme') {
foreach ($cache as $hook => $info) {
// Check only if not registered by the theme or engine.
if (empty($result[$hook])) {
foreach ($variable_process_phases as $phase_key => $phase) {
if (!isset($info[$phase_key])) {
$cache[$hook][$phase_key] = array();
}
// Only use non-hook-specific variable processors for theming hooks
// implemented as templates. See theme().
if (isset($info['template']) && function_exists($name. '_'. $phase)) {
$cache[$hook][$phase_key][] = $name. '_'. $phase;
}
if (function_exists($name. '_'. $phase. '_'. $hook)) {
$cache[$hook][$phase_key][] = $name. '_'. $phase. '_'. $hook;
$cache[$hook]['theme path'] = $path;
}
// Ensure uniqueness.
$cache[$hook][$phase_key] = array_unique($cache[$hook][$phase_key]);
}
}
}
}
}
Размещено на Allbest.ru
Подобные документы
Исследование особенностей организации мультимедийной информации. Абстрактные представления. Языки запросов для мультимедийных данных. Индексирование в структурированных мультимедийных базах данных. Анализ мультимедиа-интерфейса для описания содержимого.
презентация [174,6 K], добавлен 11.10.2013Механизм построения мультимедийных приложений. Разработка мультимедийного проекта "классы в С++" - приложения, построенного с применением пакета AuthorWare 6.5. Плюсы и минусы программы в сравнении "AUK BC". Требования к программному обеспечению.
курсовая работа [1,9 M], добавлен 17.07.2009Понятие и структура мультимедийных презентаций, их классификация и типы, принципы и этапы формирования. Цели и функции применения в образовательной сфере, дидактические требования. Использование мультимедийных презентаций на уроках иностранного языка.
доклад [41,0 K], добавлен 11.09.2015Тенденции развития компьютерных информационных мультимедиа-технологий. Носители мультимедийных продуктов. Типы данных мультимедиа, средства их обработки и аппаратная поддержка. Разработка плакатов в программе CorelDRAW X3. Построение чертежа в SPLAN.
курсовая работа [2,0 M], добавлен 18.01.2015Понятие каталогов ресурсов Интернета. Разновидности и средства их использования. Разработка модели в средах программирования BPwin и Erwin. Программное моделирование в среде проектирования Rational Rose. Регистрация незарегистрированного пользователя.
курсовая работа [2,5 M], добавлен 24.11.2014Особенности программных средств (браузеров) для просмотра web-страниц и для работы с электронной почтой (почтовые клиенты). Этапы и методы разработки Интернет-сайта. Средства поиска информации в Интернет. Сравнительная характеристика поисковых сайтов.
курсовая работа [617,9 K], добавлен 19.06.2010Сущность презентации - современного эффективного способа представления информации о товарах и услугах, о разрабатываемых программных продуктах и предлагаемых технологиях. Технологии разработки мультимедийных продуктов. Сенсорные и виртуальные киоски.
контрольная работа [1,4 M], добавлен 11.09.2015История появления Интернета. Сервисы для хранения мультимедийных ресурсов. Социальные поисковые системы. Сервисы, позволяющие пользователю вести записи, редактировать текст сайта. Персональные рекомендательные сервисы. Общение в трехмерной реальности.
реферат [34,3 K], добавлен 12.10.2014Достоинства и недостатки дистанционного обучения, его оснащение программным обеспечением. Определение педагогического дизайна мультимедийных курсов. Экономическое обоснование выбора технических и программных средств и расчет затрат на их разработку.
дипломная работа [6,2 M], добавлен 18.05.2009Обзор программных средств разработки приложений и обоснование выбора языка программирования. Классификация приложений для работы с базами данных. Функциональная структура базы данных с указанием назначения программных модулей, руководство пользователя.
дипломная работа [645,3 K], добавлен 21.11.2010