Аппетит ведь приходит, как известно, всегда во время езды: а давайте попробуем еще больше расширить функционал формы отправки сообщений для joomla... честно говоря, идея эта возникла не вдруг, а - продиктована условиями одного из заказов, так что здесь у нас все вместе, и интерес и профит, как говорится.
Необходимо получить в итоге два выпадающих списка - города и вакансии - первое и второе должно быть доступно для редактирования из административной панели модуля, и однозначно определять email отправки; дополнительно копии сообщения отправляются еще на несколько произвольных email, также вводимых в админке.
Число городов, вакансий и email ничем не ограничено; ну разве что - рамками разумного. Любое сочетание город + вакансия может быть привязано как к уникальному email, так и к любому из уже использованных в контексте иных сочетаний городов/вакансий адресов электронной почты. Таким образом, сочетание город - вакансия - email мы с вами будем вводить в бакенде модуля следующим образом:
Ничего себе задачка, да? Ну, что же. Перво-наперво прописываем в xml-файле нашей формочки textarea:
<field
name="textarea"
type="textarea"
default=""
label="city + vacancy + email"
description="city + vacancy + email"
/>
Далее:
foreach(explode("\n", $params->get('textarea')) as $k => $v){
$a = explode(' + ', $v);
$arr[$a[0]][$a[1]] = trim($a[2]);
}
var_dump($arr);
Да, я заранее принимаю контраргументацию такого рода - неудобно, необычно... сам бы пошел совершенно иным путем, налаживая процесс отсылки резюме через контактную форму сайта. Но - заказчик есть заказчик, и если не "всегда прав", то - хотя бы иногда. Заказана была разработка именно такого joomla extension, и - ни шага в сторону.
получаем массив php, по которому пробежимся foreach (второй цикл несколько замысловат, не правда ли?), и получаем на выходе уже два dropdown-списка нашей формочки:
города
<tr>
<td><label for="subject">Город</label></td>
<td><select name="subject" id="subject">
<option value="" selected="selected"> - Выберите -</option>
<? foreach(array_keys($arr) as $k => $city){
echo "<option value='${city}'>$city</option>";
} ?>
</select> </td>
</tr>
и вакансии
<tr>
<td><label for="subject1">Вакансия</label></td>
<td><select name="subject1" id="subject1">
<option value="" selected="selected"> - Выберите -</option>
<? foreach(array_unique(call_user_func_array('array_merge', array_map(function($x){return array_keys($x);}, array_values($arr)))) as $vacancy ){
echo "<option value='${vacancy}'>$vacancy</option>";
}?>
</select>
<tr>
Что же дальше? - хм, хороший вопрос. Дальше... а дальше, по идее, мы без проблем по двум ключам получаем искомый наш email вот таким вот примерно образом:
$arr[$input->get('city')][$input->get('vacancy')];
и все бы хорошо, но... но тут мы вдруг упираемся, как в стену, в то самое обстоятельство, о котором уже шла речь в первой части этой статьи. А именно: наш с вами joomla-модуль, собственно, и называть-то модулем - не вполне корректно. Файл submit.php, образно говоря, прикручен скотчем, и совершенно не в контексте MVC Joomla; так, получить в нем email из параметров модуля - довольно проблематично, хотя массив соответствия по ключам "город" и "вакансия" у нас с вами вроде как бы и есть. Далее можно либо продолжать двигаться дорогой быстрых хаков... либо же предпочесть извилистым горным тропкам более удобные пути - наезженные и безопасные.
Все три варианта модуля, характеризующие три этапа разработки, вы можете загрузить на форуме, в первом сообщении топика. Там же ссылка на демку модуля.
Как приятно порой быть кратким. Модуль модернизировал и запаковал для вас Hubbitus, за что ему искреннее спасибо; теперь это полноценный extension для Joomla 3.*. Все читатели блога имеют возможность загрузить последнюю версию модуля со странички форума; несколько скриншотов, иллюстрирующих работу модуля, вы видите на этой страничке. Модуль укомплектован recaptcha, проверяет заполнение полей (частью на стороне клиента, частью - на стороне сервера), если не находит соответствия в триадах ключей - выводит предупреждение о том, что в данном городе данная вакансия отсутствует. Дополнительно админка модуля позволяет прописать до трех email, на которые будут отправлены копии сообщения (как и задумывалось). Вполне возможно, этот модуль пригодится вам; переписать под свои цели и задачи довольно несложно... если так - мы не зря пропарились с новым модулем отправки сообщений for Joomla 3.* на основе Fancy AJAX Contact Form. Enjoy!