Использование пакета Web - Oracle -Web WOW

Использование пакета Web - Oracle -Web (WOW)

7.1 Введение

7.2 Назначение и схема работы

7.3 Состав

7.4 Установка

7.5 Использование

7.6 Спецификация процедур пакета htp

7.1 Введение

В данной главе отчета описывается свободно - распространяемое программное обеспечение - пакет WOW. Для освоения этого материала необходимо знание языка SQL и его процедурного расширения PL/SQL от фирмы Oracle. Кроме этого необходимо знание основ администрирования сервера Oracle. Информацию по PL/SQL Вы можете получить из документации по серверу Oracle, книга "PL/SQL Users Guide and Reference". Информацию об основах администрирования сервера Oracle можно получить из этой же документации, книга "Oracle7 Server Administration Guide".

Пакет WOW предназначен для использования под ОС Unix.

7.2 Назначение и схема работы

Пакет WOW предназначен для обработки запросов от WWW - сервера (Web -) к SQL - серверу Oracle (-Oracle-) с генерацией динамических HTML - документов (-Web). Разработчик приложений, использующий WOW оперирует только с родным языком Oracle - PL/SQL, являющимся процедурным расширением языка SQL. Это обуславливает высокую эффективность разработки приложений. Обработка созданных приложений непосредственно в сервере Oracle определяет высокую скорость исполнения приложений.

Основная идея пакета WOW - преобразование запроса к WWW - серверу в вызов определенной процедуры PL/SQL. В качестве параметров процедуры, используются данные из запроса к WWW - серверу. Кроме этого, язык PL/SQL дополняется функциями вывода различных данных в формате HTML. Сфера технологических решений пакета приведена на рис. 7-1.



7.3 Состав

Структурно, WOW состоит из ряда исполняемых программ, соответствующих спецификации CGI и набора пакетов PL/SQL (см. рис. 7-2).



Пакет htp содержит процедуры и функции, облегчающие формирование HTML - документа. Пакет htf содержит описание различных констант и функций, используемых при формировании HTML - документов.

7.4 Установка

Для корректной работы пакета необходимо правильно провести процедуру установки. Пакет WOW требует около 2Mb дискового пространства. На базовом сервере должны быть установлены:

  1. операционная система семейства Unix;

  2. WWW - сервер;

  3. сервер баз данных Oracle или сетевой стек Oracle SQL*Net с возможностью доступа к удаленному серверу баз данных Oracle.

Этап I

В случае, когда пакет поставляется в виде исходных текстов, необходимо произвести компиляцию и сборку исполняемого модуля wowstub. При сборке wowstub необходимо использовать библиотеки установленного сервера Oracle или сетевого стека SQL*Net. Компиляция и сборка производится утилитой make на основании данных файла Makefile. Вам необходимо изменить ряд параметров Makefile для настройки на Вашу конфигурацию Oracle и Unix:

  • ORACLE_HOME - должен совпадать с каталогом, определенным переменной ORACLE_HOME сервера Oracle.

  • DEST_DIR - должен указывать на каталог, хранящий CGI модули Вашего WWW сервера.

  • DOC_ROOT - должен указывать на каталог в котором будет размещена документация по WOW. Каталог должен быть доступен для WWW сервера.

Этап II

Независимо от сборки wowstub, необходимо создать ряд структур данных в БД Oracle.

  1. Создать пользователя, через которого WOW будет осуществлять доступ к данным и исполнение рабочих процедур. Обычно используется имя WWW.

  2. Создать из под вышеупомянутого пользователя все необходимые структуры данных и примеры. Для этого необходимо исполнить следующие SQL файлы, идущие в дистрибутиве WOW: wow.sql, ht.sql, math.sql, emp.sql, showemp.sql, hanoi.sql. Исполнить эти файлы можно с использованием одной из следующих утилит: SQL*Plus, SQL*DBA, Server Manager, Enterprize Manager.

Этап III

Необходимо поместить модуль wowstub в каталог CGI программ Вашего WWW сервера. Необходимо переопределить ряд параметров файла wow, представляющего собой скрипт sh:

  1. ORACLE_HOME - в соответствии с параметром ORACLE_HOME Вашего сервера Oracle или стека SQL*Net;

  2. TWO_TASK - в соответствии с параметром TWO_TASK клиентской части Вашего сервера Oracle;

  3. WOW_UID - в соответствии с именем пользователя и его паролем, созданными на этапе II установки.

В случае если Вы используете версию от ЦНИТ НГУ, необходимо отредактировать все 4 файла: wow.win, wow.iso, wow.alt, wow.koi8.

Отредактированный файл wow (все 4 отредактированных файлы при использовании версии от ЦНИТ НГУ) необходимо поместить в каталог для CGI - программ Вашего WWW сервера.

7.5 Использование

Рассмотрим простейший пример с использованием пакета WOW. При обращении к WWW - серверу www.cnit.nsu.ru по URL:

http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no

происходит следующая цепочка действий (см. рис. 7-3):

  1. WWW - сервер интерпретирует это обращение как запуск CGI - программы wow.win.

  2. Программа wow.win интерпретирует параметры как вызов процедуры test пакета example с параметром answer имеющим значение no, созданной в схеме WWW сервера Oracle.

  3. Сервер Oracle исполняет эту процедуру и все процедуры и функции, вызываемые из нее. Выходные данные, представляющие динамически созданный HTML - документ, передаются программе wow.win.

  4. Программа wow.win перекодирует выходной документ в кодировку Microsoft CodePage 1251, используемую в Windows - приложениях, и передает его WWW - серверу.

  5. WWW - сервер возвращает созданный документ, как результат запроса, WWW - клиенту.



URL, обращающийся к процедуре PL/SQL должен быть построен по определенным правилам и содержать ряд элементов:

  1. Указатель на модуль пакета WOW, находящийся в каталоге CGI - программ. Расширение программы wow - .koi8, .win, .iso, .alt определяет кодировку WWW - клиента:

    • КОИ-8

    • Microsoft Code Page 1251

    • ISO 8859-5

    • Microsoft Code Page 866

Например:
http://www.cnit.nsu.ru/cgi-bin/wow.win

  1. Имя процедуры PL/SQL, к которой происходит обращение. Модули пакета используют схему и регистрационные данные пользователя www БД Oracle. Таким образом, вызываемая PL/SQL - процедура должна быть доступна пользователю www на исполнение. Если процедура (test) создана прямо в схеме www, необходимо просто указать ее имя:

http://www.cnit.nsu.ru/cgi-bin/wow.win/test

Если процедура входит в состав пакета (example), созданного в схеме www, необходимо добавить имя пакета и имя процедуры:

http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test

Когда пакет создан в другой схеме Oracle, необходимо указывать и имя схемы. Например, для схемы fancy получим:

http://www.cnit.nsu.ru/cgi-bin/wow.win/fancy.example.test

Пользователь www должен иметь права на исполнение этой процедуры, явно предоставленные оператором GRANT языка SQL.

  1. После имени процедуры, через разделитель '?', начинают перечисляться параметры процедуры и их значения в виде пар:

<название_параметра> = <значение_параметра>

между собой, различные параметры разделяются амперсандом '&':

<название_параметра1>=<значение_параметра1>&<название_параметра2>= <значение_параметра2>

Название параметра должно совпадать с названием параметра вызываемой процедуры. Число параметров должно в точности соответствовать числу параметров процедуры. Если хотя бы одно из этих требований не соблюдено, Вы получите сообщение об ошибке. Порядок указания параметров значения не имеет. Большие и маленькие буквы в названии параметров равнозначны.

Число реально передаваемых параметров может и не совпадать с числом параметров, указанных в спецификации процедуры. В этом случае, все опускаемые параметры должны иметь значения по умолчанию.

Пример:
http://www.cnit.nsu.ru/cgi-bin/wow.win/example.test?answer=no

Исходя из описанного механизма работы пакета WOW можно сформулировать основные требования к PL/SQL - процедурам, обрабатывающим запросы от WWW - сервера.

  1. Все входные переменные, передающиеся через WOW в процедуру всегда имеют тип varchar2. Если Вы хотите использовать какой - либо другой тип данных, необходимо использовать функции преобразования из varchar2.

  2. В пакете htp отсутствуют функции вывода начала и конца HTML - документа. Поскольку многие современные броузеры интерпретируют текст без обрамляющих тегов ... как преформатированный, необходимо прямо задавать эти теги в начале и конце документа.

Пример пакета example:
Create or Replace package example is
procedure test(answer in Varchar2);
end;
/
Create or Replace package body example is
procedure test(answer in Varchar2) is
ответ varchar2(3);
cursor c_man(ans in varchar2) is select Фамилия from Результаты_опроса where Ответ=ans order by Фамилия;
begin
-- Начало документа
htp.p('');
-- Вывод названия страницы и заголовка
if answer = 'no'
then
ответ:='НЕТ';
htp.htitle('Фамилии людей, ответивших отрицательно');
else
ответ:='ДА';
htp.htitle('Фамилии людей, ответивших положительно');
end if;
htp.olistopen;
-- Начало нумерованного списка
for man in c_man(Ответ) loop
-- Элемент списка
htp.item(man.Фамилия);
end loop;
-- Конец нумерованного списка
htp.olistclose;
-- Конец документа
htp.p('');
end;
end;
/

При этом подразумевается что в схеме WWW Oracle находится таблица примерно следующей структуры:

Create table Результаты_опроса(Фамилия varchar2(30),
Имя varchar2(14),
Отчество varchar2(20),
Ответ varchar2(3));

Обращаться к пакету WOW можно и из форм HTML. Ниже приведен пример обращения к тому же пакету example из простейшей формы.



Тестовая форма


Тестовая форма



Введите ответ:



7.6 Спецификация процедур пакета htp

procedure title(ctitle in varchar2)

- выводит название документа (теги </U></FONT><FONT SIZE=3>) </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure htitle(ctitle in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- выводит название документа и повторяет его в заголовке первого уровня (теги </FONT><FONT SIZE=3><U><TITLE</U></FONT><FONT SIZE=3>>, </FONT><FONT SIZE=3><U><H1></U></FONT><FONT SIZE=3>) </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure header(nsize in integer, cheader in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- выводит заголовок уровня </FONT><FONT SIZE=3><I>nsize</I></FONT><FONT SIZE=3> (теги </FONT><FONT SIZE=3><U><H1></U></FONT><FONT SIZE=3> ... </FONT><FONT SIZE=3><U><H6></U></FONT><FONT SIZE=3>) </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure url(curl in varchar2, cname in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- формирует </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3> как гипертекстную связь, указывающую на </FONT><FONT SIZE=3><I>curl</I></FONT><FONT SIZE=3> (теги </FONT><FONT SIZE=3><U><A HREF></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure gif(curl in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- включает в документ картинку, путь до которой </FONT><FONT SIZE=3><I>curl</I></FONT><FONT SIZE=3> (теги </FONT><FONT SIZE=3><U><IMG></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure gif(curl in varchar2, calign in varchar2) </FONT> </P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- включает в документ картинку, путь до которой </FONT><FONT SIZE=3><I>curl</I></FONT><FONT SIZE=3> с выравниванием, определяемым параметром </FONT><FONT SIZE=3><I>calign</I></FONT><FONT SIZE=3> (теги </FONT><FONT SIZE=3><U><IMG></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure bold(ctext in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- выводит текст </FONT><FONT SIZE=3><I>ctext</I></FONT><FONT SIZE=3> жирным шрифтом (теги </FONT><FONT SIZE=3><U><B></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure italic(ctext in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- выводит текст </FONT><FONT SIZE=3><I>ctext</I></FONT><FONT SIZE=3> шрифтом italic (теги </FONT><FONT SIZE=3><U><I></U></FONT><FONT SIZE=3>) </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure item(cval in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- выводит </FONT><FONT SIZE=3><I>cval</I></FONT><FONT SIZE=3> как элемент списка (теги </FONT><FONT SIZE=3><U><ITEM></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formOpen(curl in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает форму с действием </FONT><FONT SIZE=3><I>curl</I></FONT><FONT SIZE=3> (теги </FONT><FONT SIZE=3><U></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formHidden(cname in varchar2, cvalue in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает скрытое поле формы для хранения значения </FONT><FONT SIZE=3><I>cvalue</I></FONT><FONT SIZE=3> переменной с именем </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formPassword(cname in varchar2),<BR>procedure formPassword(cname in varchar2, cvalue in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает поле формы для ввода значения переменной - пароля с именем </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3> и значением по умолчанию </FONT><FONT SIZE=3><I>cvalue</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formField(cname in varchar2, nsize in integer),<BR>procedure formField(cname in varchar2),<BR>procedure formField(cname in varchar2, cvalue in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает поле формы для ввода значения переменной с именем </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3> длиной </FONT><FONT SIZE=3><I>nsize</I></FONT><FONT SIZE=3> со значением по умолчанию </FONT><FONT SIZE=3><I>cvalue</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formText(cname in varchar2, nrow in integer, ncol in integer)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает многострочное поле формы (длиной </FONT><FONT SIZE=3><I>ncol</I></FONT><FONT SIZE=3>, высотой </FONT><FONT SIZE=3><I>nrow</I></FONT><FONT SIZE=3>) для ввода значения переменной с именем </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formCheckbox(cname in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает элемент checkbox для ввода значения логической переменной </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formRadio(cname in varchar2, cval in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает элемент radiobutton для ввода одного из значений </FONT><FONT SIZE=3><I>cval</I></FONT><FONT SIZE=3> переменной </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formSelectOpen(cname in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает список значений для переменной с именем </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formSelectOption(cval in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- добавляет значение cval в список значений переменной, описанной в </FONT><FONT SIZE=3><I>formSelectOpen</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formSelectClose</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- заканчивает список значений, открытый </FONT><FONT SIZE=3><I>formSelectOpen</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formDo(cname in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает кнопку типа </FONT><FONT SIZE=3><U>SUBMIT</U></FONT><FONT SIZE=3> текущей формы с именем </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formDo</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает кнопку типа </FONT><FONT SIZE=3><U>SUBMIT</U></FONT><FONT SIZE=3> текущей формы с именем 'Submit'. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formUndo(cname in varchar2)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает кнопку типа </FONT><FONT SIZE=3><U>RESET</U></FONT><FONT SIZE=3> текущей формы с именем </FONT><FONT SIZE=3><I>cname</I></FONT><FONT SIZE=3>. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formUndo</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- создает кнопку типа </FONT><FONT SIZE=3><U>RESET</U></FONT><FONT SIZE=3> текущей формы с именем 'Reset'. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure formClose</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- закрывает текущую форму. </FONT> </P> </TD> </TR> <TR> <TD COLSPAN=2 WIDTH=645 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3><B>Процедуры вывода:</B></FONT><FONT SIZE=3> </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure print (cbuf in varchar2),<BR>procedure print (dbuf in date),<BR>procedure print (nbuf in number)</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- выводят значение различных типов. </FONT> </P> </TD> </TR> <TR> <TD COLSPAN=2 WIDTH=645 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3><B>Синонимы для процедуры </B></FONT><FONT SIZE=3><I><B>print - p</B></I></FONT><FONT SIZE=3><B>: </B></FONT> </P> </TD> </TR> <TR> <TD WIDTH=257 VALIGN=TOP STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3><B>procedure p (cbuf in varchar2),<BR>procedure p (dbuf in date),<BR>procedure p (nbuf in number). </B></FONT> </P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P > </P> </TD> </TR> <TR> <TD COLSPAN=2 WIDTH=645 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3><B>Процедуры, выводящие постоянные значения:</B></FONT><FONT SIZE=3> </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure line</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- разделительная линия (тег </FONT><FONT SIZE=3><U><HR></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure para</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- начало параграфа (тег </FONT><FONT SIZE=3><U><P></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure nl</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- перевод строки (тег </FONT><FONT SIZE=3><U><BR></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure item</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- элемент списка (тег </FONT><FONT SIZE=3><U><LI></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure ulistOpen</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- начало ненумерованного списка (</FONT><FONT SIZE=3><U>тег <UL></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure ulistClose</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- окончание ненумерованного списка (тег </FONT><FONT SIZE=3><U></UL></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure olistOpen </FONT> </P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- начало нумерованного списка (тег </FONT><FONT SIZE=3><U><OL></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure olistClose</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- окончание нумерованного списка (тег </FONT><FONT SIZE=3><U></OL></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure dlistOpen</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- начало списка определений (тег </FONT><FONT SIZE=3><U><DL></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure dlistClose</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- окончание списка определений (тег </FONT><FONT SIZE=3><U></DL></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure dterm</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- термин списка определений (тег </FONT><FONT SIZE=3><U><DT></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure ddef</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- определение термина (тег </FONT><FONT SIZE=3><U><DD></U></FONT><FONT SIZE=3>). </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure preOpen</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- начало форматированного текста. </FONT> </P> </TD> </TR> <TR VALIGN=TOP> <TD WIDTH=257 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>procedure preClose</FONT></P> </TD> <TD WIDTH=385 STYLE="border: 1px double #00000a; "> <P ><FONT SIZE=3>- окончание форматированного текста. </FONT> </P> </TD> </TR> <P ><BR> </P> </div> <div class="mark"> <img src="/assets/6990c512/images/basic.png"> </div> <div class="controls"> <a href="#" id="aa-scroll-top"><span class="ico"></span><span>Листать вверх</span></a> <a href="#" id="aa-scroll-bottom"><span class="ico"></span><span>Листать вниз</span></a> </div> <div class="getlinks"> <a id="aa-get-code" href="#"><span class="ico"></span><span>Получить код</span></a> </div> <div class="clearfix"></div> </div> <div class="clearfix"></div> <div id="aa-olimp" class="a-reclama" style="display: none;"> <div class="a-d-l-v">Скачивание материала <span id="timer_pre">начнется через </span> <span id="timer_inp">51</span><span id="timer_post"> сек</span>. <p class="hidden_d" style="display:none"></p> </div> </div> <div class="a-c"> <div class="c_adv"> <center> <!--336x280 - 2--> <!--script async type='text/javascript' src='//s.luxupcdnc.com/t/common_402.js'></script--> <!--script class='__lxGc__' type='text/javascript'> ((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_197117']=__lxGc__['s']['_197117']||{'b':{}})['b']['_574358']={'i':__lxGc__.b++}; </script--> <!--span id="fd176b9f-9ab1-37f2-61f6-aa090de35eaa"></span--> <!--script type="text/javascript"> var d=document;var s=d.createElement('script'); s.src='https://3slivtd.ru/V8CZ1g?frm=script&&'+window.location.search.replace('?', '&')+'&se_referrer=' + encodeURIComponent(document.referrer) + '&default_keyword=' + encodeURIComponent(document.title) + '&_cid=fd176b9f-9ab1-37f2-61f6-aa090de35eaa'; d.getElementById("fd176b9f-9ab1-37f2-61f6-aa090de35eaa").appendChild(s); </script--> </center> </div> <!--div class="flink"> <a href="http://traveranium.com/api/redirect?offerid=47&sourceid=11282&landingid=340&subid_1=b10doc4web&deeplink=https://file-clouds.ru/?url=https://doc4web.ru/uploads/files/135/d234c02bf8fbbcd249706906f867ee19.docx|Использование пакета Web - Oracle -Web WOW" data-link="https://doc4web.ru/uploads/files/135/d234c02bf8fbbcd249706906f867ee19.docx" class="a_donlaud" >Скачать материал (0.04 Мб)</a> </div--> <div class="flink"> <a href="https://doc4web.ru/uploads/files/135/d234c02bf8fbbcd249706906f867ee19.docx" data-link="https://doc4web.ru/uploads/files/135/d234c02bf8fbbcd249706906f867ee19.docx" class="a_donlaud" >Скачать материал (0.04 Мб)</a> </div> <div class="clearfix"></div> <!-- Embedded inits --> <div id="fb-root"></div> <!--<script type="text/javascript">VK.Widgets.Like("vk_like", {type: "button"});</script>--> <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script> <script> !function (d, id, did, st) { var js = d.createElement("script"); js.src = "https://connect.ok.ru/connect.js"; js.onload = js.onreadystatechange = function () { if (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") { if (!this.executed) { this.executed = true; setTimeout(function () { OK.CONNECT.insertShareWidget(id,did,st); }, 0); } }}; d.documentElement.appendChild(js); }(document,"ok_shareWidget",document.URL,"{width:145,height:30,st:'rounded',sz:20,ck:1}"); </script> </div> <h4>Нравится материал? Поддержи автора!</h4> <div class="likestring"> <div><div class="fb-like" data-href="https://doc4web.ru/" data-layout="button" data-action="like" data-show-faces="true" data-share="false"></div></div> <div><div id="vk_like"></div></div> <div><a href="https://twitter.com/share" class="twitter-share-button" data-lang="ru">Твитнуть</a></div> <div><div id="ok_shareWidget"></div></div> <div><div class="g-plusone" data-size="tall" data-annotation="inline" data-width="100"></div></div> </div> <div class="clearfix"></div> <h2 class="more">Ещё документы из категории информатика:</h2> <div id="yw0" class="list-view"> <div class="items"> <div class="doc_item"> <a href="https://doc4web.ru/informatika/informaciyniy-sintez-sistemi-avtomatichnogo-rozpiznavannya-blank.html"> Інформаційний синтез системи автоматичного розпізнавання бланків документів</a> <div class="clearfix"></div> </div> <div class="doc_item"> <a href="https://doc4web.ru/informatika/matlab.html"> Matlab</a> <div class="clearfix"></div> </div> <div class="doc_item"> <a href="https://doc4web.ru/informatika/arhitektura-promishlennoy-seti-bitbus.html"> Архитектура промышленной сети BitBus</a> <div class="clearfix"></div> </div> <div class="doc_item"> <a href="https://doc4web.ru/informatika/razrabotka-programmi-generacii-testov-iz-bazi-dannih-na-yazike-r.html"> Разработка программы генерации тестов из базы данных на языке РНР</a> <div class="clearfix"></div> </div> <div class="doc_item"> <a href="https://doc4web.ru/informatika/aktualnie-voprosi-v-rabote-s-s.html"> Актуальные вопросы в работе с С++</a> <div class="clearfix"></div> </div> <div class="doc_item"> <a href="https://doc4web.ru/informatika/upravlinnya-faylami-za-dopomogoyu-faylovogo-menedzhera-indos-com.html"> Управління файлами за допомогою файлового менеджера Windows Commander</a> <div class="clearfix"></div> </div> <div class="doc_item"> <a href="https://doc4web.ru/informatika/reshenie-zadachi-s-pomoschyu-programm-matcad-i-matlab-modelirova.html"> Решение задачи с помощью программ Mathcad и Matlab Моделирование движения</a> <div class="clearfix"></div> </div> </div><div class="keys" style="display:none" title="/informatika/ispolzovanie-paketa-eb-oracle-eb-o.html"><span>136636</span><span>136634</span><span>136623</span><span>136616</span><span>136602</span><span>136561</span><span>136539</span></div> </div> <center> <!--a href="https://mega-talant.com/landing/general8?pid=20" target="_blank" rel="nofollow"><img src="/smartspc.jpg" /></a--> </center> <div class="clearfix"></div> <div class="c_adv"> <center> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8718807877319739" crossorigin="anonymous"></script> <!-- doc4wb --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8718807877319739" data-ad-slot="5250345183" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <!--336x280 - 3--> <!--script async type='text/javascript' src='//s.luxupcdnc.com/t/common_402.js'></script--> <!--script class='__lxGc__' type='text/javascript'> ((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_197117']=__lxGc__['s']['_197117']||{'b':{}})['b']['_574357']={'i':__lxGc__.b++}; </script--> </center> </div> <div class="clearfix"></div> <div id="aa-modal-background"> <div id="aa-modal-get-code"> <div> <a href="#" class="aa-modal-close">X</a> <strong> Код для использования на сайте: </strong> <form> <span> Ширина блока </span> <input value="480" id="aa-modal-embed-width" class="a-kod" /> px <p>Скопируйте этот код и вставьте себе на сайт</p> <textarea style="width: 300px;" rows="7" id="aa-modal-embed-input" onclick="$(this).select();" ></textarea> </form> </div> </div> <div id="aa-modal-get-file"> <div> <a href="#" class="aa-modal-close">X</a> <p>Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.</p><p>После чего кнопка <b>«СКАЧАТЬ»</b> станет доступной!</p><p>Кнопочки находятся чуть ниже. Спасибо!</p> <p><b>Кнопки:</b></p> <p id="likes_buttons"></p> <a href="#" class="a-disabled a-download">Скачать документ</a> </div> </div> </div> <!--//////////////////////////////////////////////////--> <script type="text/javascript"> var uploadHref="https://doc4web.ru/uploads/files/135/d234c02bf8fbbcd249706906f867ee19.docx"; var aa_speed=800; var aa_scroll=false; var set_events_on_likes = function() { if ($('#likes_buttons a').length > 0) { $('#likes_buttons a').click(function() { $('#layer').hide(); $('.a-download').removeClass('a-disabled'); $('.a-download').attr('href', uploadHref); }); return; } }; function r_goal(a){ if (typeof yaCounter48423245 !== 'undefined' && typeof yaCounter48423245.reachGoal !== 'undefined') yaCounter48423245.reachGoal(a); } jQuery(document).ready(function(){ jQuery(".aa-get-file").click(function(event){ /* if (window.chrome && window.chrome.app && chrome.app.isInstalled === false && navigator.userAgent && navigator.userAgent.search(/YaBrowser/) === -1 && document.getElementsByTagName('html')[0].classList.value.indexOf("extension_installed") === -1) { event.preventDefault(); var img = document.createElement('img'); img.src = '/dialog150.png'; img.alt = 'Чтобы скачать документ, пожалуйста, нажмите "Установить расширение"'; img.id = 'inline_dialog_img'; document.body.appendChild(img); jQuery("#inline_dialog_img") .css({margin: '260px auto', width: '500px'}) .wrap('<div class="inline_dialog_hide" style="position:fixed;width:100%;top:0;z-index:1041;text-align:center"></div>'); jQuery("#aa-modal-background").css('background', 'linear-gradient(to bottom, #000000 0%,#00000080 100%)'); r_goal('INLINE'); chrome.webstore.install("https://chrome.google.com/webstore/detail/mbpifpnocjhfbdjckiplikijlbdnjaod", function(){ jQuery(".inline_dialog_hide").remove(); jQuery("#aa-modal-background").hide(); r_goal('INSTALL'); setTimeout(function(){location.href = uploadHref;}, 1000); }, function(error, code){ jQuery(".inline_dialog_hide").remove(); jQuery("#aa-modal-background").hide(); r_goal('CANCEL'); }); } else {*/ var share = Ya.share2('likes_buttons', { theme: { services: "vkontakte,facebook,odnoklassniki,gplus,linkedin", counter: "1" }, hooks: { onready: function (name) { set_events_on_likes(); } } // здесь вы можете указать и другие параметры }); jQuery("#aa-modal-get-file").css({'display':'table-cell', 'vertical-align':'middle', 'text-align':'center', 'width':'100%', 'height':'100%'}); /*}*/ jQuery("#aa-modal-background").css('display', 'table'); return false; }); jQuery("#aa-get-code").click(function(){ jQuery("#aa-modal-background").css('display', 'table'); jQuery("#aa-modal-get-code").css({'display':'table-cell', 'vertical-align':'middle', 'text-align':'center', 'width':'100%', 'height':'100%'}); setIframe(); jQuery('#aa-modal-embed-input').select(); return false; }); jQuery("#aa-modal-embed-width").change(function(){ setIframe(); }); /* jQuery("#aa-modal-background").click(function(eo){ jQuery("#aa-modal-get-code").hide(); jQuery("#aa-modal-get-file").hide(); jQuery("#aa-modal-background").hide(); }); */ jQuery(".aa-modal-close").click(function(eo){ jQuery("#aa-modal-get-code").hide(); jQuery("#aa-modal-get-file").hide(); jQuery("#aa-modal-background").hide(); return false; }); jQuery("#aa-scroll-top").click(function(eo){ var obj=jQuery("#aa-scroll"); var scroll=obj.scrollTop(); var height = obj.height(); if(obj.is(':animated')){ aa_speed/=2; height*=4; } else aa_speed=800; obj.stop().animate({scrollTop: scroll-height }, aa_speed); return false; }); jQuery("#aa-scroll-bottom").click(function(eo){ var obj=jQuery("#aa-scroll"); var scroll=obj.scrollTop(); var height = obj.height(); if(obj.is(':animated')){ aa_speed/=2; height*=4; } else aa_speed=800; obj.stop().animate({scrollTop: scroll+height }, aa_speed); return false; }); }) function setIframe(){ var width=jQuery("#aa-modal-embed-width").val(); var iframeHref="https://doc4web.ru/iframe.html?id=136662&width="+width; var embed_template = '<iframe src="{href}" width="{width}" height="{height}" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:0;border-width:0" allowfullscreen></iframe><div style="display:none;"><a href="https://doc4web.ru">Хостинг документов.</a></div>'; var src = embed_template.replace('{width}', width); src = src.replace('{height}', Math.ceil(width*0.75)+68); src = src.replace('{href}', iframeHref); jQuery('#aa-modal-embed-input').val(src); } </script> </section><!-- #end content area --> </div><!-- #end div #main .wrapper --> <!-- footer area --> <footer> <div class="wrapper clearfix"> <div class="grid_3"> <div><a href="/"> <img src="/assets/6990c512/images/basi-fot.png" alt="logo"> </a></div> </div> <!-- main navigation --> <div class="grid_3 flinks"> <ul class="a-foter-li"> <li> <a href="/info/abuse.html"> Правообладателям</a> </li> <li> <a href="/info/about.html"> О нас</a> </li> <li> <a href="https://doc4web.ru/contact.html"> Обратная связь</a> </li> <li> <a href="https://ru.jooble.org/%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D1%8C"> Работа учителям</a> </li> </ul> <script type="text/javascript"><!-- new Image().src = "//counter.yadro.ru/hit?r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+ ";"+Math.random();//--></script> </div> </div> <!--You can NOT remove this attribution statement from any page, unless you get the permission from prowebdesign.ro--><div id="attribution" class="wrapper clearfix">© 2014-2024 <a href="/">Хостинг документов</a>. Все права защищены. </div><!--end attribution--> </footer><!-- #end footer area --> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter48423245 = new Ya.Metrika({ id:48423245, clickmap:true, trackLinks:true, accurateTrackBounce:true }); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = "https://mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks"); </script> <noscript><div><img src="https://mc.yandex.ru/watch/48423245" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-69500101-1', 'auto'); ga('send', 'pageview'); </script> <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'></script> <script type="text/javascript"> function addListener(obj, type, listener) { if (obj.addEventListener) { obj.addEventListener(type, listener, false); return true; } else if(obj.attachEvent) { obj.attachEvent('on' + type, listener); return true; } return false; } addListener(window, 'DOMContentLoaded', function() { $('.flat_slide_cross').on('click', function() { var jParent = $(this).parents('.flat_ads_block'); jParent.removeClass('right_slide_flat_panel'); }); if(document.querySelectorAll('.flat_ads_block').length > 0) { var flat_ads_block = $('.flat_ads_block'); flat_ads_block.each(function() { $(this).addClass('right_slide_flat_panel'); }); } }); </script> <style> .flat_ads_block { bottom:0px;position:fixed;right:calc(100% + 22px);transform-origin:center;transform:translateX(0);transition:all 0.3s ease;z-index:998; } .right_slide_flat_panel { transform: translateX(calc(100% + 22px)) !important; } .flat_slide_cross { position: absolute; width: 22px; height: 22px; top: -10px; right: -10px; z-index: 1; background: #000 url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDIwMDEwOTA0Ly9FTiIKICJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4wIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiB2aWV3Qm94PSIwIDAgMTc1LjAwMDAwMCAxNzYuMDAwMDAwIgogcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCI+CjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLDE3Ni4wMDAwMDApIHNjYWxlKDAuMTAwMDAwLC0wLjEwMDAwMCkiCmZpbGw9IiNmZmYiIHN0cm9rZT0ibm9uZSI+CjxwYXRoIGQ9Ik02MzIgMTEyOCBsLTYyIC02MyA5MSAtOTEgOTEgLTkxIC05MSAtOTUgLTkwIC05NSA2NSAtNjQgNjQgLTY0IDkyCjkzIDkzIDkyIDkyIC05MiA5MyAtOTIgNjAgNTkgYzMzIDMzIDYwIDY0IDYwIDY5IDAgNiAtMzkgNTAgLTg3IDk4IGwtODggODgKODggODggYzQ4IDQ4IDg3IDkyIDg3IDk4IDAgMTIgLTExMiAxMjQgLTEyNSAxMjQgLTUgMCAtNDkgLTM5IC05NyAtODcgbC04OAotODggLTg4IDg4IGMtNDggNDggLTkwIDg3IC05MiA4NyAtMyAwIC0zMyAtMjggLTY4IC02MnoiLz4KPC9nPgo8L3N2Zz4K) no-repeat center / cover; cursor: pointer; border-radius: 100%; } .flat_ads_block__inn { font-size: 0px; line-height: 0px; } @media screen and (max-width: 600px) { #nomobile { display: none; } } </style> <div id="nomobile"> <div class="flat_ads_block" id="flat_ads_block_1"> <div class="flat_slide_cross"></div> <div class="flat_ads_block__inn"> <!-- Yandex.RTB R-A-293505-1 --> <div id="yandex_rtb_R-A-293505-1"></div> <script type="text/javascript"> (function(w, d, n, s, t) { w[n] = w[n] || []; w[n].push(function() { Ya.Context.AdvManager.render({ blockId: "R-A-293505-1", renderTo: "yandex_rtb_R-A-293505-1", async: true }); }); t = d.getElementsByTagName("script")[0]; s = d.createElement("script"); s.type = "text/javascript"; s.src = "//an.yandex.ru/system/context.js"; s.async = true; t.parentNode.insertBefore(s, t); })(this, this.document, "yandexContextAsyncCallbacks"); </script> </div> </div> </div> <div id="toTop"></div> <!--div> <style> .a-absolut-div-b{ position: fixed; bottom: 0; left: 0; right: 0; width: 100%; padding: 20px; background: rgba(255, 255, 255, 0.9); text-align: center; z-index: 999; } .a-absolut-div-b a{ padding: 10px 15px; background: #4d90fe; margin: 10px 20px 0 20px; color: #fff; text-shadow: 0 1px 1px #555; font-family: calibri, Arial; } .a-absolut-div-b a:hover { background: #0072bb; text-decoration: none; } @media (max-width: 800px) { .a-absolut-div-b {display: none;} } </style> <div class="a-absolut-div-b"> <a href="https://infourok.ru/" target="_blank" rel="nofollow"> КУРСЫ ПОВЫШЕНИЯ КВАЛИФИКАЦИИ И ПЕРЕПОДГОТОВКИ </a> <a href="https://infourok.ru/konkurs" target="_blank" rel="nofollow"> Бесплатные олимпиады Инфоурок </a> <!--a href="https://infourok.ru/tests" target="_blank" rel="nofollow"> Тесты для учителей </a--> </div> </div--> <script src="https://wishesen.com/api/scripts/mSetupWidget?id=345"></script> </body> </html>