Задать вопрос
Наши специалисты ответят на любой интересующий вопрос по услуге

Квалификационный тест на должность веб-разработчика.

Битрикс.

1. Что нужно прописать в php файле, чтобы использовать API Битрикса?

2. Как подлючить шаблон сайта в php файле?

3. Какой модуль необходимо подключить для использования статического метода CIBlockElement::GetList() ?

4. В какой последовательности происходит подключение файлов компонента: .parameters.php, component.php, result_modifier.php, template/.default/template.php

5. Как работают и где настраиваются ЧПУ?

6. Как в составном компоненте подключаются простые компоненты?

7. Что такое агенты и где они создаются/подключаются?

8. Как подключаются обработчики событий?

9. Какие глобальные переменные недоступны в файле /php_include/init.php?

10. Какие платёжные системы интегрированы в модуле «Интернет-магазин»?

11. Что такое кеширование, и как использовать кеширование (используя API Битрикса) в компонентах?

12. Что такое почтовые события и почтовые шаблоны?

PHP

Пусть у нас есть три вложенных друг в друга раздела A, B, C, каждый из которых представлен в виде массива:

$A = array('ID' => 1, 'SECTION_ID' =>'');

$B=array('ID' => 2, 'SECTION_ID' => 1);

$C = array('ID'=>3, 'SECTON_ID' => 2);

Пусть пользователь, переходит в раздел, представляемый переменной $C. Необходимо используя рекурсивную функцию, определить ID самого верхнего родителя (в данном случае $A) этого раздела. То есть на вход функции должен передаваться ID (но не обязательно только он) текущего раздела (C), а в результате её работы мы должны получить ID раздела A.

Javascript

Пусть у нас есть некое число n. Необходимо преобразовать его к такому виду, чтобы каждые три знака (начиная с конца) в нём были отделены от остальных пробелом.

Например: n = 12345678. Тогда нужно получить 12 345 678.

Код написать на JS (или хотя бы написать алгоритм).

Jquery

Пусть у нас есть вот такой html код:

<a href='#' id='id1'>Click Me!</a>

<input type='radio' class='myclass' />

<img src='123.lpg' title='texttexttext' />

<textarea></textarea>

<input type='text' />

Необходимо написать код, обрабатывающий событие click на теге с id=id1. По клику на данном теге, значение трибута title тега <img> должно быть скопировано в атрибут value тегов <textarea></textarea> и <input type='text'>, сам тег с id=id1 должен получить новый атрибут rel, значение которого так же должно быть равно значению title тега <img>, а <input type='radio' class='myclass' /> должен стать отмеченным.

SQL

Пусть у нас есть три таблицы:

Магазин_ноутбуков

ID

Название_магазина

Производитель_ноутбуков

Производитель

ID

Название

Модели_ноутбуков

Модель

ID

Название

Цена

а) Необходимо указать связи и их типы между атрибутами (столбцами) таблиц

б) Необходимо написать следующие запросы на языке SQL :

1. Выбрать названия всех производителей ноутбуков, представленных в каком-то одном магазине

2. Выбрать названия всех моделей ноутбуков представленные в каком-то одном магазине

3. Выбрать названия всех моделей ноутбуков, цена которых выше средней для данного производителя

Безопасность

Указать на потенциальные уязвимости в данном коде:

<html><body>

<?

if($_REQUEST['text']) {

mysql_connect ($hostname, $user , $password);

mysql_select_db($db);

$q = mysql_query("INSERT INTO Messages (lgn, pswd, txt) VALUES ($_REQUEST['login'], $_REQUEST['password'], $_REQUEST['text'])");

}

?>

Ваше сообщение: <?=$_REQUEST['text']?> принято!

<form>

<input type='text' name='login'>

<input type='text' name='password'>

<textarea name='text'></textarea>

</form>

</body></html>

Ответы к тесту (тест проходила Кочерова А.С.)

БИТРИКС.

1. Чтобы использовать API Битрикса, нужно в php-файле подключить пролог.

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

2. (Если я правильно поняла вопрос) Чтобы подключить шаблон сайта в данном php файле, нужно в настройках продукта -> сайты выбрать тип условия "для папки или файла", выбрать нужный php-файл, выбрать нужный шаблон сайта, сохранить.

Замечание. Может быть имеется в виду как именно подключается шаблон в php файле, то все шаблоны хранятся в папке /bitrix/templates/. Папка шаблона содержит обязательные файлы header.php и footer.php. Применить тот или иной шаблон к сайту можно в административном меню "Сайты", в настройках сайта, раздел "Внешний вид".

3. Необходимо подключить модуль "Информационные блоки" (iblock).

4. result_modifier.php, .parameters.php, component.php, templates/.default/template.php

5. ЧПУ (человекопонятные УРЛ) - механизм переопределения адресов. Обработка адресов применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указанному адресу. Управление правилами преобразования адресов производится на странице: /bitrix/admin/urlrewrite_list.php. При добавлении на страницу компонента с поддержкой ЧПУ (если файл сохраняется с помощью API) автоматически создается правило переопределения адреса. Проверить настройки ЧПУ можно на странице: Настройки –> Настройки продукта –> Обработка адресов.

6. Простые компоненты в составном подключаются так:

$APPLICATION->IncludeComponent("componentName","", array(), "parentComponent").

7. Агенты - технология, позволяющая запускать произвольные PHP функции (агенты) с заданной периодичностью. В самом начале загрузки каждой страницы (непосредственно перед событием OnPageStart) система автоматически проверяет, есть ли агент, который нуждается в запуске и в случае необходимости - исполняет его. Для того чтобы агент выполнился в заданное время, его необходимо зарегистрировать в системе при помощи метода CAgent::AddAgent. Функция-агент принадлежит либо модулю, либо ее необходимо разместить в файле /bitrix/php_interface/init.php. Этот файл автоматически подключается в прологе.

8. RegisterModuleDependences - функция для регистрации обработчиков, расположенных в модулях. Эту функцию необходимо вызвать один раз при инсталляции модуля, либо AddEventHandler - функция, предназначенная для регистрации произвольных обработчиков, которые не расположены в модулях. Ее необходимо вызывать до возникновения события на тех страницах, где требуется его обработать. Например, если событие нужно обработать на всех страницах, где оно возникает, то функцию можно вызвать в /bitrix/php_interface/init.php.

9. APPLICATION, USER, DB, DBType, DBHost, DBName, DBLogin, DBPassword

10. Платёжные системы, интегрированные в модуле "Интернет-магазин": наличный расчет, кредитная карта, WebMoney, Яндекс.Деньги, Сбербанк, счет, наличные курьеру.

11. Кеширование - это запись информации, которая может быть запрошена с наибольшей вероятностью, в промежуточный буфер с быстрым доступом. В компонентах 2.0 есть встроенная поддержка кеширования. Для тех компонентов, для

которых возможно кеширование, в наборе параметров отражаются настройки

кеширования: авто, кешировать или не кешировать. Если отмечена опция Кешировать при установленном фильтре, то после выборки пользователем информации с помощью фильтра, она будет закеширована. При этом будет использоваться установленный тип кеширования и время кеширования.

12. Почтовое событие - это почтовое сообщение, имеющее свой тип и отправляемое по соответствующему почтовому шаблону. Почтовый шаблон определяет текст почтового сообщения, а также порядок расположения полей заданных в типе почтового события.

Почтовые шаблоны доступны в административном меню "Настройки системы" -> "Почтовые шаблоны". Для манипуляции почтовыми шаблонами предназначен класс CEventMessage. Для создания почтового события предназначен класс CEvent.

------------------------------------------------

PHP

<?PHP

//$id - id текущего раздела

//$ar_name название раздела

//$p_id - id родительского раздела

function parent_id($id, $ar_name)

{

$p_id = $ar_name[$id]['SECTION_ID'];

return $p_id;

return parent_id($p_id, $B);

return parent_id($p_id, $A);

}

echo parent_id($id, $C);

?>

--------------------------------------------------

JAVASCRIPT

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title>Untitled Document</title>

<script language="javascript">

<!--//

function test(obj)

{

var a=obj.num.value

var l=a.length

var result=""

M=Math.floor(l/3)

for (var i=1; i <=M; i++)

{

l=a.length

b=a.slice(l-3)

a=a.slice(0,-3)

result=" ".concat(b,result)

}

result=a.concat(result)

obj.res.value=result

}

//-->

</script>

</head>

<body>

<form name="form1">

Введите число: <input name="num" type="text" size="10" /><hr />

<input type="button" value="Преобразовать" onclick="test(form1)" /><hr />

Результат: <input type="text" size="20" name="res" /><hr />

</form>

</body>

</html>

----------------------------------------------------

JQUERY

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

<title>Untitled Document</title>

<script type="text/javascript" src="/js/jquery-1.6.2.min.js"></script>

<script language="javascript">

<!--//

function change()

{

$(":radio").attr("checked","checked");

var a=$("img").attr("title");

$("input").attr("value",a);

$("textarea").attr("value",a);

$("#id1").attr("rel",a);

}

//-->

</script>

<body>

<a href='#' id='id1' onclick="change()">Click Me!</a>

<input type="radio" class='myclass'/ > <img src="123.jpg" title="texttexttext"/>

<textarea></textarea>

<input type="text" />

</body>

</html>

----------------------------------------------------

SQL

a) Типы связей:

между атрибутом id и названием магазина, названием производителя и названием модели жесткая,

между названием и ценой, и остальными - гибкая

б) SQL-запросы:

1. SELECT Производитель_ноутбуков FROM Магазин_ноутбуков Where ID=Данный_ID

2. SELECT Модели_ноутбуков FROM Производитель Where ID IN

(SELECT Производитель_ноутбуков FROM Магазин_ноутбуков Where ID=Данный_ID)

3. SELECT Модели_ноутбуков FROM Модель WHERE Цена >= AVG(SELECT Цена FROM Модель Where ID IN (SELECT Модели_ноутбуков FROM Производитель Where ID=Данный_ID))

----------------------------------------------------

БЕЗОПАСНОСТЬ

Потенциальная уязвимость в данном коде в следующем:

<input type="text" name="login">

<input type="text" name="password">

<textarea name="text"></textarea>

Требуется проверка введенных данных на наличие запрещенных символов, ограничение на длину текста. Кроме того нужно закрыть доступ к файлу, хранящему пароли к базе данных. Лучше запрос к бд вынести в отдельный файл и запаролировать этот файл.

Заказать услугу
Оформите заявку на сайте, мы свяжемся с вами в ближайшее время и ответим на все интересующие вопросы.