Блог студии RGB  http://blog.rgb.kiev.ua Разумные пределы и пределы разумного. Путеводные заметки Tue, 06 Sep 2011 13:27:50 +0000 ru hourly 1 http://wordpress.org/?v=3.2.1 Добавить новое поле в материал 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
CMS (Система управления контентом) http://blog.rgb.kiev.ua/2010/10/cms/ http://blog.rgb.kiev.ua/2010/10/cms/#comments Tue, 19 Oct 2010 22:33:33 +0000 night http://blog.rgb.kiev.ua/?p=211 CMS (агл. Content Managment System) – система управления контентом. В простонароде CMS называют «движком». Набор сценариев (в основном большинство сценариев пишется на языке программирования PHP), которые предоставляют инструментарий для рядового пользователя по управлению содержимым сайта. Все сайты, написанные на какой-то CMS, имеют административную панель, которая и есть реализацией инструментария по управлению контентом. Примеры популярных CMS – Joomla, Drupal, Bitrix, WordPress.

]]>
http://blog.rgb.kiev.ua/2010/10/cms/feed/ 3
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