Иногда возникает ситуация, когда код становится слишком объемным и сложным для восприятия, поэтому его удобно дробить на небольшие самостоятельные автоподгружаемые функции, что значительно упрощает восприятия в целом кода и уменьшает потребляемую память сервера. Но у меня возникла другая проблема: решив переписать все объявленные переменные в PHP в свои пользовательские функции, понял, что это будет сделать сложновато, если не вынести CSS-вставки и скриптовые вставки в отдельные скрипты, потому как проблема в одинарных и двойных кавычках не позволяет в PHP вывести весь код одним махом: пришлось бы части кода с двойными кавычками печатать отдельно, а с одинарными отдельно. Назначать для этих целей html-переменные - весьма коряво, делить страницу на HTML PHP включения не рационально, если очень много вставок. Итак, кто понял о чем суть, читаем далее...
В принципе двойные и одинарные кавычки ничем не отличаются и нужны лишь для того, чтобы можно было один отдельный кусок кода запихнуть в другой, но все же в html-коде лучше использовать общепринятые двойные кавычки по умолчанию. Решил переписать функции в PHP, вернее, простые переменные переписать в функции; дело в том, что переменные постоянно сидят в памяти после их объявления (например, $a1 = ''; $a2 = 0;) или создания, потому как имеют статус "глобальные", а переменные в функциях имеют статус "локальные" и удаляются из памяти после выполнения функции. Переменные из функции можно либо распечатать (например, оператором "echo $a;", либо передать самой функции, которая вернет окончательное значение, затем его можно уже распечатать на экране, т.е. "echo func($arg);". Еще одной проблемой является то, что нельзя просто так объявить переменную, где имеются двойные и одинарные кавычки, если, например, требуется подгрузить ЯваСкрипт (javascript), например:
<input
type="text" maxlength="8" value="DefaultValue"
name="name" id="id" class="Class"
onfocus = "
if (this.DefaultValue && this.value == this.defaultValue)
{this.value = '';};
this.style.backgroundColor='#f0faff';
this.setAttribute('class','highlight')"
onblur = "this.style.backgroundColor='#fff'"
/>
Тогда можно переменную объявить как html-переменную, содержащую часть или даже всю страницу html, например:
$table_check_form = <<<EOF
... обычный html-код с одинарными и двойными кавычками ...
EOF;
Но опять же, зачем нужно хранить в памяти (ОЗУ сервера) такую тяжелую переменную? Эх... решил почти всё переписать на функции. Итак, форму для проверки сайтов в своем будущем seo-чекере (блин, не знаю, когда доделаю его... nervous) я вытащил в отдельный скрипт: вместо:
<?php
$form = <<<EOF
<div id="block_seochecker">
<form id="check_form" name="check_form" method="POST">
<select size="1" name="checkwebselect">
<optgroup label=" Check domain">
<option value="seo" selected>seo</option>
<option value="out">out</option>
</optgroup>
</select>
<input id="seochecker" type="text" name="web"
maxlength="100" value="seochecker..."
onblur = "if (this.value=='') {this.value='seochecker...';}"
onfocus = "if (this.value=='seochecker...') {this.value='';}" />
<input id="go" type="submit" name="submit" value="GO!" />
</form>
<div id="Example">
Example: <a href="#" onclick="ExampleInsert(this);">isle-blog.ru</a>
</div>
</div>
EOF;
//Вывод формы проверки сайтов
echo $form;
?>
переписал так:
<?php
//Создаем функцию, чтоб не повторять много раз код
//на разных страницах сайта и не хранить его в памяти.
function table_check_form() {
echo '
<div id="block_seochecker">
...
<input id="seochecker" type="text" name="web"
maxlength="100" value="seochecker..."
onblur="checkform(this);" onfocus="checkform(this);"
/>
...
</div>
';
}
//Вывод формы проверки сайтов
table_check_form();
?>
Скрипт:
function checkform(field) {
defaultvalue = "seochecker...";
field.setAttribute("class","");
field.style.backgroundColor="#faf0ff";
if (field.value == defaultvalue) field.value = "";
else if (field.value == "") {
field.value = defaultvalue;
field.setAttribute("class","highlight");
field.style.backgroundColor="#f0faff";
}
}
Кончно же такую ерунду, как фон (backgroundColor) лучше не в скрипт пихать, а выносить в отдельный CSS-файл в запись вида: Element.class {} - обычный класс. Element.class:hover {} - класс при перемещении мышки над объектом (перекрытие). Кто не в курсе, напомню, что указывать полный ДОМ (DOM), т.е. полный путь к нужному элементу гораздо выгодней, работает быстрей, например, так: Element.class Element.class Element.class, Element.class {} чем так: .class {} #id {} Также айди (id - стиль для одного элемента) работает быстрей, чем класс (class - стиль для нескольких элементов). А отдельные файлы скриптов и стилей (CSS-файл) работают быстрей потому что грузятся в память отдельно от основного сайта и кешируются для повторного использования, чтоб не грузиться заново. Эх, самому бы уже начать соблюдать эти правила bigsmile Подгрузка скриптов и стилей (вставляем между <head> и </head>):
<script type="text/javascript" src="js.js"></script>
<link rel="stylesheet" href="css.css" type="text/css" media="screen" />
Ну вот и все. Если кому помогло, буду рад, если у кого-то есть свои наблюдения, буду рад, если поделитесь. Если интересно продолжение, подписывайтесь на РСС моих Интернет заметок. Удачи. UPDATE Интересный вариант, показывающий в полях формы "Email" и "password" любой текст, валью (англ. value - подсказка, метка) нашел с использованием библиотеки скриптов jquery:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script language="javascript" src="http://code.jquery.com/jquery-1.4.1.min.js"></script>
<script language="Javascript">
$(document).ready(function() {
$('#password-clear').show();
$('#password-password').hide();
$('#password-clear').focus(function() {
$('#password-clear').hide();
$('#password-password').show();
$('#password-password').focus();
});
$('#password-password').blur(function() {
if ($('#password-password').val() == '') {
$('#password-clear').show();
$('#password-password').hide();
}
});
$('.default-value').each(function() {
var default_value = this.value;
$(this).focus(function() {
if (this.value == default_value) this.value = '';
});
$(this).blur(function() {
if (this.value == '') this.value = default_value;
});
});
});
</script>
<style type="text/css">
#password-clear {display:none;}
</style>
</head>
<body>
<form>
<input class="default-value" type="text" name="email" value="Email Address" />
<input id="password-clear" type="text" value="Password" autocomplete="off" />
<input id="password-password" type="password" name="password" value="" autocomplete="off" />
</form>
</body>
</html>
Или вот:
$('.values').each(function() {
var default_value = this.value;
$(this).css('color','#666'); //this could be in the style sheet instead
$(this).focus(function() {
if(this.value == default_value) {
this.value = '';
$(this).css('color','#333');
}
});
$(this).blur(function() {
if(this.value == '') {
$(this).css('color','#666');
this.value = default_value;
}
});
});
...
<input type="text" class="values" size="30" value="Enter keywords here" />
<input type="text" class="values" size="30" value="Another search box" />