Выносим элементы CSS и JavaScript в отдельные файлы

Иногда возникает ситуация, когда код становится слишком объемным и сложным для восприятия, поэтому его удобно дробить на небольшие самостоятельные автоподгружаемые функции, что значительно упрощает восприятия в целом кода и уменьшает потребляемую память сервера. Но у меня возникла другая проблема: решив переписать все объявленные переменные в 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" />
Добавлено: 24 Августа 2013 11:18:34 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...