Варианты загрузки информации на сайте

В этой статье предлагаю рассмотреть варианты загрузки информации на сайт:

Стандартный способ

Под стандартный способом я подразумеваю простое обращение клиента к серверу и получение ответной информации. Такой способ вы используете постоянно когда забиваете ссылку в браузер или нажимаете кнопку в какой-то форме.
Рассмотрим это на следующем примере:
Здесь методом POST на сервер отправляются данные, но в строке браузера высветится только /?hello, а на странице появится текст:Были отправленны следующие данные:
Клиент

<form action="/?hello" method="post">
<input type="text" name="a">
<input type="submit" value="Сохранить">
</form>

Сервер

<?php
     if (isset($_GET['hello']))// проверяем переменную отправленную методом GET
     {
          echo "Были отправленны следующие данные:".$_POST['a'];
     }
?>

Ajax в формате текста

C помощью этого способа вы можете динамически подгружать данные на вашу страницу не производя перезагрузку самой страницы.
Для использования этого метода необходимо использовать в JavaScript объект XMLHttpRequest.
Ниже приведен класс инициализации XMLHttpRequest с использованием методов GET и POST:

var sAjax = function(_type){

	if (typeof(_type) == "undefined")
	{this.type=false;}else{this.type=_type;}
//где _type - способ отправки данных -
//синхронное(браузер подвисает во время передачи данных)
//или асинхронное(браузер не подвисает и вы можете
//дальше продолжать работу со страницей), по умолчанию синхронный

	this.XmlHttp = function()
	{
		var o;
		if (window.XMLHttpRequest) {
			o = new XMLHttpRequest();
			if (o.readyState == null) {
				o.readyState = 1;
				o.addEventListener("load",
					function ()
					{
					o.readyState = 4;
					if (typeof o.onreadystatechange == "function")
					     o.onreadystatechange();
					}, false);
			}
			return o;
		}
		else if (window.ActiveXObject) {
			o = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
			for (var i = 0; o[i]; i++)
				try { return new ActiveXObject(o[i] + ".XmlHttp"); }
				catch (ex) {};
		}
		return false;
	};

	this.Get = function(_url){ //отправка данных методом GET
		var xmlhttp = this.XmlHttp();
		xmlhttp.open('GET', _url , this.type);
		xmlhttp.send(null);
		if (xmlhttp.readyState == 4) {
			return {status:xmlhttp.status, text:xmlhttp.responseText};
		}
	};

	this.Post = function(_url, _param){ //отправка данных методом POST
		var xmlhttp = this.XmlHttp();
		xmlhttp.open('POST', _url , this.type);
		xmlhttp.send(_param);
		if (xmlhttp.readyState == 4) {
			return {status:xmlhttp.status, text:xmlhttp.responseText};
		}
	};
}

Рассмотрим как это работает, на следующем примере:
Здесь по клику на кнопку Получить данные, методом GET на сервер отправляются переменные: hello и a=1, а в поле с id=»A» появится текст:Были отправленны следующие данные:1
Клиент

<script>
	var obj= new sAjax();
	var B = document.getElementById('A');
</script>
<input id="A" value="">
<button onclick="B.value=obj.Get('/?hello&a=1').text">Получить данные</button>

Сервер

<?php
     if (isset($_GET['hello']))// проверяем переменную отправленную методом GET
     {
          echo "Были отправленны следующие данные:".$_GET['a'];
     }
?>

Ajax в формате json

Этот способ подразумевает под собой получение от сервера, в ответ на запрос, данных в виде массива.
Давайте посмотрим как этот способ возможно применить на практике:
По клику на кнопку Получить данные, методом GET на сервер отправляются переменные: hello и a=1, сервер отвечает данными в формате json, который впоследствии преобразуется в массив данных и применяется к полю с id=»A» в котором появится текст:Были отправленны следующие данные:1
Клиент

<script>
	var obj= new sAjax();
	var B = document.getElementById('A');
	function app(url)
	{
		// запрашиваем данные
		var A=obj.Get(url);
		//преобразуем текст ответа сервера в массив
		var MAS = eval("(" + A.text + ")");
		// применяем значение
		B.value=MAS['msg'];
	}
</script>
<input id="A" value="">
<button onclick="app('/?hello&a=1')">Получить данные</button>

Сервер

<?php
     if (isset($_GET['hello']))// проверяем переменную отправленную методом GET
     {
          // создаем массив
          $MAS['msg']="Были отправленны следующие данные:".$_GET['a'];
          // кодируем массив в формат json
          echo json_encode($MAS);
     }
?>

Два этих способа имеют ограничение:

  • нельзя получить javascript и потом запустить его
  • запрос через XMLHttpRequest возможно производить только на тот же домен, откуда загрузилась страница, на которой производится инициализация XMLHttpRequest

Погрузка через JavaScript

Этот способ подразумевает вставку в заголовок страницы новой ссылки, которую браузер автоматически подгрузит.
В этом способе есть также свои недостатки и достоинства:

  • Во первых, запрос осуществляется только методом GET, что является существенным ограничением
  • Во вторых, загружать возможно только javascript, с последующем применением скриптов к странице
  • В третьих, загрузка информации возможна с любого сервера, что является большим преимуществом!
<script>
var scriptTag = document.createElement("script");
scriptTag.setAttribute("type", "text/javascript");
scriptTag.setAttribute("src", url); // где url -  ваша ссылка на загружаемые данные
document.getElementsByTagName("head")[0].appendChild(scriptTag);
</script>

Joomla 1.7.x — Не отображается переключение языков

Т.к. в версии 1.7 немного запутана настройка мультиязычности и в интернете статей на русском языке практически нет, решил по подробнее написать здесь.

Итак, пошаговая инструкция:
1. Включить (Опубликовать) в менеджере плагинов — плагин «Система — Фильтр языка».
2. В этом плагине включить — «Связь пунктов меню».
3. Добавить в менеджере модулей — модуль «Переключение языков», разместить его на любой позиции.
4. В менеджере модулей — снимаем с публикации модуль «Главное меню».
5. В менеджере меню — создаем два меню, русское и например английское, пока без пунктов.
6. В менеджере категорий — создаем например категорию «Новости».
7. Добавляем в нее две статьи (материал) — русскую и английскую, с указанием языка.
8. В русском меню создаем пункт «Новости» со ссылкой на категорию «Новости» с указанием русского языка.
9. Так же в английском меню создаем пункт «News» тоже со ссылкой на эту же категорию с указанием английского языка.
10. В обоих пунктах указываем в настройках «Связи пункта меню» — ссылку на соответствующий пункт другого меню.
11. Добавляем в менеджере модулей — два модуля «Меню» — со ссылками на соответствующие меню.
12. Вот в принципе и все, количество меню = количеству языков.

Web Server Apache — Virtual Host

В своей работе я используем вэб сервер Apache + PHP + Mysql.

Для того чтобы разместить на своем локальном вэб сервере вам необходимо использовать Виртуальные хосты. Они настраиваются следующим образом:

## Объявляете прослушивание портов:
Listen 80
Listen 443
## Объявляете прослушивание IP-адресов: [ip]:[port],
## если вы укажите вместо конкретного ip - * звездочку,
## то вэб сервер будет прослушивать все ip адреса.
NameVirtualHost		127.0.1.1:80

## Объявляем стандартный хост который будет видится
## всем кто обратится к вашему компьютеру по ip адресу
## если вместо * вы укажите конкретный ip адрес то веб сервер
## будет обращается к этой директории если в адресе
## будет указан этот ip адрес.
<VirtualHost *:80>
       # адрес директории сайта
   DocumentRoot 	D:\_default_
       # расположение лога ошибок
   ErrorLog 		D:\log\apache_error_default_.log
       # расположение лога обращений к хосту
   CustomLog 		D:\log\apache_access_default_.log common
</VirtualHost>

## здесь объявляем наш хост на котором будем тестировать сайты
<VirtualHost 127.0.1.1:80>
    DocumentRoot 	D:\myweb.local
       # название нашего сайта (Домен)
    ServerName 		myweb.local
    ErrorLog 		D:\log\apache_error.myweb.local.log
    CustomLog 		D:\log\apache_access.myweb.local.log common
</VirtualHost>

## если вы хотите использовать под домены то они прописываются
## следующим образом, в этом случае в папке D:\myweb.local\
## должны находится папки с названием поддоменов.
<VirtualHost 127.0.1.1:80>
    ServerName myweb.local
    ServerAlias *.myweb.local
    ServerSignature Off
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^myweb\.local [NC]
    RewriteRule ^/(.*) http://myweb.local/$1 [L,R]

    VirtualDocumentRoot D:\myweb.local\%1
    ServerSignature On
    Options FollowSymLinks Includes MultiViews ExecCGI
    UseCanonicalName Off
</VirtualHost>

Также вам обязательно нужно внести изменения в файл hosts:

127.0.1.1       myweb.local www.myweb.local

Это необходимо чтобы ваш браузер нашел соответствие ip адреса и домена.

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

Hello Word!

Здравствуй дорогой читатель!

В нашем блоге мы планируем кратко выкладывать обучающие материалы по программированию на PHP, JavaScript, CSS, HTML. Мы постараемся кратко и лаконично писать статьи, основываясь на которых Вы сможете в кротчайшие сроки освоить азы программирования.

Если вы хотите связаться с нами, Вам доступна форма отправки сообщения.
Мы будем рады, если это посещение нашего сайта, не останется для Вас бесполезным.

С уважением, Михаил.