Блог студии RGB  http://blog.rgb.kiev.ua Разумные пределы и пределы разумного. Путеводные заметки Tue, 06 Sep 2011 13:27:50 +0000 ru hourly 1 http://wordpress.org/?v=3.2.1 Валидный тег <a> с функциями атрибута target (_blank, _top, _self, someframe) http://blog.rgb.kiev.ua/2011/03/a-target/ http://blog.rgb.kiev.ua/2011/03/a-target/#comments Sun, 13 Mar 2011 12:26:00 +0000 admin http://blog.rgb.kiev.ua/?p=287 Валидный код с использованием javascript-аналогов.

target="_blank"

<a href="http://rgb.kiev.ua" target="_blank">Создание сайта</a>
<a href="http://rgb.kiev.ua" onclick="return !window.open(this.href)">Создание сайта</a>

target="_top"

<a href="http://rgb.kiev.ua" target="_top">Создание сайта</a>
<a href="http://rgb.kiev.ua" onclick="top.location.href = this.href;">Создание сайта</a>

target="_self"

<a href="http://rgb.kiev.ua" target="_self">Создание сайта</a>
<a href="http://rgb.kiev.ua" onclick="self.location.href = this.href;">Создание сайта</a>

target="_parent"

<a href="http://rgb.kiev.ua" target="_parent">Создание сайта</a>
<a href="http://rgb.kiev.ua" onclick="parent.location.href = this.href;">Создание сайта</a>

target="_parent"

<a href="http://rgb.kiev.ua" target="someframe">Создание сайта</a>
<a href="http://rgb.kiev.ua" onclick="top.frames['someframe'].location.href = this.href;">Создание сайта</a>
]]>
http://blog.rgb.kiev.ua/2011/03/a-target/feed/ 0
Как запретить Skype добавлять рамку для номера телефона http://blog.rgb.kiev.ua/2011/02/html_phone_no_skype/ http://blog.rgb.kiev.ua/2011/02/html_phone_no_skype/#comments Thu, 10 Feb 2011 23:17:51 +0000 admin http://blog.rgb.kiev.ua/?p=244 Вместе с мессенджером Skype дополнительно устанавливаются аддоны к популярным браузерам позволяющие пользователю совершать звонок в один клик, прямо с веб-страницы на которой указан телефонный номер. Однако, кроме добавления этой несомненно полезной функции, skype-аддон также изменяет оформление текста телефонного номера, тем самым нарушая дизайнерский замысел создателя сайта.


Существует несколько способов решения проблемы, но, одни из них откровенно глупы, иные не всегда работают должным образом, либо не проходят strict-валидацию. Оставим за бортом ворох лишнего хлама и рассмотрим два наиболее простых и изящных метода:


Вариант первый – сделать невозможным парсинг номера:

+38 063 <span style="display: none;"></span>336-36-06

Вариант второй – сброс стилевых правил добавляемых аддоном:

span.skype_pnh_print_container{display:inline !important;}
span.skype_pnh_container{display:none !important;}


Лирическое отступление: логика подсказывает – раз пользователь, находясь в здравом уме и твёрдой памяти, установил это злосчастное дополнение, значит, он сознательно предпочитает пожертвовать визуальным стилем ради добавления новых востребованных функций. То есть, принудительный запрет функций аддона будет прямым игнорированием желаний потребителя. С другой стороны 95% пользователей понятия не имеют почему появилась и зачем нужна эта некрасивая рамка вокруг номера возможно у разработчика имеются некие веские причины максимально строго придерживаться норм дизайна. Иными словами, стоит задуматься так ли уж необходимо блокировать работу skype-дополнения.

]]>
http://blog.rgb.kiev.ua/2011/02/html_phone_no_skype/feed/ 0
Добавить новое поле в материал Joomla 1.5 http://blog.rgb.kiev.ua/2010/11/joomla-add-new-field/ http://blog.rgb.kiev.ua/2010/11/joomla-add-new-field/#comments Sun, 31 Oct 2010 23:19:02 +0000 admin http://blog.rgb.kiev.ua/?p=217 Нередко возникает необходимость расширить функциональность стандартного компонента публикации материалов Joomla, будь то добавление в панель администрирования контента дополнительного текстового поля, select-списка, информационного блока и т.д. В подобном случае, использование громоздких сторонних CCK является нерациональным, хотя бы по причине их значительной избыточности. Ищущим простых изящных решений предназначена эта статья.
Задача не из сложных, и требует не столько понимания принципов работы CMS Joomla, сколько эмпирического знания – где что нужно дописать/изменить. Далее следует пример создания «эталонного» дополнительно поля <input type="text" /> в админке материала.


Примеры тестировались на:

  • PHP – 5.3.2
  • Joomla – 1.5.21

1. Добавление в шаблон интерфейса back-end

Открываем файл administrator/components/com_content/admin.content.html.php – здесь содержится шаблон страницы добавляемого/редактируемого материала. Находим строку номер 833* где видим закрывающий тег. Непосредственно после него добавляем свою таблицу:

<table class="adminform">
	<tbody>
		<tr>
			<td>Новое поле:</td>
			<td><input id="new_field" class="inputbox" maxlength="255" name="new_field" size="40" type="text" value="<php echo $row->new_field; ?>" /></td>
			<td></td>
			<td></td>
		</tr>
	</tbody>
</table>

1.1. (опционально) Добавление в шаблон интерфейса front-end

Для возможности работы с новым полем непосредственно со страниц сайта, аналогично работаем с файлом components/com_content/views/article/tmpl/form.php:

<table class="adminform">
	<tbody>
		<tr>
			<td>Новое поле:</td>
			<td><input id="new_field" class="inputbox" maxlength="255" name="new_field" size="40" type="text" value="<php echo $this->article->new_field; ?>" /></td>
			<td></td>
			<td></td>
		</tr>
	</tbody>
</table>

2. Модификация базы данных

При помощи любого менеджера баз данных (например phpMyAdmin) редактируем структуру таблицы #__content (по умолчанию jos_content), добавляя поле new_field с текстовым типом данных. Например, таким запросом:

ALTER TABLE jos_content ADD new_field VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

3. Модификация библиотеки работы с базой данных

Открываем файл libraries/joomla/database/table/content.php , находим строку class JTableContent extends JTable и добавляем свойство var $new_field = null;

class JTableContent extends JTable {
	/** @var string This is our new field */
	var $new_field 		= null;
	/** @var int Primary key */
	var $id 			= null;
	/** @var string */
	var $title 			= null;

4. Модификация модели компонента

В папке components/com_content/models расположены несколько файлов, функциональное назначение которых отражено в их названии. Например, category.php содержит код MVC-модели части компонента отвечающего за вывод данных в формате списка/блога. В случае использования данных из нового поля вне пределов страницы материала/статьи, за которую отвечает файл article.php который не требует модификаций, необходимо будет внести изменения в запрос для выборки из таблицы . Проще всего это сделать найдя в нужном файле текст a.title_alias и добавив в перечень обрабатываемых столбцов a.new_field . К примеру, для модели категории это изменение будет выглядеть следующим образом:
В строке 361 файла category.php найти текст:

$query = 'SELECT cc.title AS category, a.id, a.title, a.alias, a.title_alias, a.introtext, ...

И модифицировать выборку:

$query = 'SELECT cc.title AS category, a.id, a.title, a.alias, a.title_alias, a.new_field, a.introtext, ...

5. Использование

К этому моменту мы уже имеем полнофункциональную систему, осталось лишь продемонстрировать пример использования добавленного функционала, что мы и сделаем, добавив данные из нового поля как постскриптум материала/статьи. Один из вариантов реализации – модификация стандартных шаблонов. Для этого необходимо открыть файл components/com_content/views/article/tmpl/default.php и, добавив необходимый html-блок, вывести данные из переменной $this->article->new_field . Находим html-код и добавляем перед ним наш код:

</table>
<div><?php echo $this->article->new_field; ?></div>
<span class="article_separator">&nbsp;</span>

* Здесь и далее приведены номера строк которые могут незначительно отличаться в последующих и предыдущих релизах CMS Joomla

]]>
http://blog.rgb.kiev.ua/2010/11/joomla-add-new-field/feed/ 13
Joomla – Как узнать какой язык выбрал пользователь сайта http://blog.rgb.kiev.ua/2010/10/joomla-language/ http://blog.rgb.kiev.ua/2010/10/joomla-language/#comments Tue, 19 Oct 2010 05:24:08 +0000 admin http://blog.rgb.kiev.ua/?p=189 Определить активный язык страницы призвана переменная language объекта типа JDocument, ссылку на который API позволяет получить посредством JFactory::getDocument(). Обращение к $object->language вернёт строку в нижнем регистре – текущее значение локали (en-gb, ru-ru и тд).


Пример использования:

<?php
$jmlThisDocument = & JFactory::getDocument();
switch ($jmlThisDocument->language) {
	case 'en-gb':
		echo 'Used language: en-gb';
	break;
case 'ru-ru':
		echo 'Used language: ru-ru';
	break;
	default:
		echo 'Used language: other';
}
?>

Примечание:

При переходе на Joomla 1.6 изменений данного метода не предвидится.

В версии Joomla 1.0.* данную функцию выполняла глобальная переменная $mosConfig_lang, с той разницей что строковое обозначение локали имело иной формат (russian, english и тд).


Примеры тестировались на:

  • PHP – 5.3.2
  • Joomla – 1.5.21
]]>
http://blog.rgb.kiev.ua/2010/10/joomla-language/feed/ 0