Главная > Статьи > Облако тегов для joomla 1.6+ - Административная часть (2)

Облако тегов для joomla 1.6+ - Административная часть (2)

Содержание материала
Облако тегов для joomla 1.6+
База дынных
Языковые константы
Административная часть (1)
Административная часть (2)
Установка плагинов, модулей
Все страницы
23.09.2012 12:54

   Создадаем в папке administrator\components\com_content\models\fields, папку с названием cloudtag в которой в свою очередь создаем 2 файла с названиями cloudtagforarticle.php и cloudtaglist.php (естественно везде кодировка UTF-8)

   Содержимое файла cloudtagforarticle.php

<?php
/**
* @copyright Roket007
*/
defined('JPATH_BASE') or die;

jimport('index.php_3Foption_3Dcom_content_26view_3Darticle_26id_3D53_3A2012-09-23-12-55-56_26catid_3D1_3Aarticls_26Itemid_3D6_26limitstart_3D4/joomla.form.formfield.css');
class JFormFieldcloudtagforarticle extends JFormField {

protected $type = 'cloudtagforarticle';

public function getInput()
{
$id = JRequest::getInt('id');
$db = JFactory::getDBO();
$db->setQuery(
'SELECT tag_text FROM #__cloud_tags_x_content LEFT JOIN #__cloud_tags ON tag_id = tag_x_content_tag_id WHERE tag_x_content_content_id = '.$id
);
if(!$db->query())
{
$tagList = false;
}
else
{
$tagList = $db->loadObjectList();
$count = count($tagList);
$html = "\n<textarea cols=\"30\" rows=\"10\" id=\"".$this->id."\" name=\"".$this->name."\">";
foreach($tagList as $key => $tag)
{
$html .= "\n".$tag->tag_text.($key < $count-1?",":"");
}
$html .= "</textarea>";
return $html;
}
}

public function getLabel() {
return parent::getLabel();
}
}
?>

   Содержимое файла cloudtaglist.php

<?php
/**
* @copyright Roket007
*/
defined('JPATH_BASE') or die;

jimport('index.php_3Foption_3Dcom_content_26view_3Darticle_26id_3D53_3A2012-09-23-12-55-56_26catid_3D1_3Aarticls_26Itemid_3D6_26limitstart_3D4/joomla.form.formfield.css');
class JFormFieldcloudtaglist extends JFormField {

protected $type = 'cloudtaglist';

public function getInput()
{
$id = JRequest::getInt('id');
$db = JFactory::getDBO();
$db->setQuery(
'SELECT *
FROM #__cloud_tags
LEFT JOIN #__cloud_tags_x_content ON tag_id = tag_x_content_tag_id '.(!is_null($id) && $id !==0?'AND tag_x_content_content_id = '.$id:'').'
GROUP BY tag_id
ORDER BY tag_x_content_id DESC ,tag_text ASC'
);
if(!$db->query())
{
$tagList = false;
}
else
{
$tagList = $db->loadObjectList();
}
if(!$tagList || empty($tagList))
{
$html = "";
$html .= "\n<input size=\"40\" placeholder=\"".JText::_('TAGS_SEARCH_TEXT')."\" class=\"searchCloudTag\" type=\"text\" id=\"searchCloudTag\">
<select class=\"tagcloudstring\" size=\"15\" cols=\"10\" multiple=\"multiple\" id=\"".$this->id."\" name=\"".$this->name."\">";
$html .= "\n<option>".JText::_('NO_TAGS_ALL')."</option>";
$html .= "\n</select>";
}
else
{
$num_of_current_tag = 0;
foreach($tagList as $nummer){
if($nummer->tag_x_content_content_id == $id && $id !== 0){
$num_of_current_tag++;
}
}
$html = '
<script type="text/javascript" language="javascript">
function addTheTag(tagger)
{
var cur_tag_value = document.getElementById("jform_cloudtagforarticle").value;
if(cur_tag_value == ""){
var seperator = "";
}
else{
var seperator = ",\n";
}
var new_tag_value = cur_tag_value + seperator + tagger.innerHTML;
document.getElementById("jform_cloudtagforarticle").value = new_tag_value;
document.getElementById("jform_cloudtagforarticle").innerHTML = new_tag_value;
}
function getSelect(){
var tagSelected = document.getElementById("jform_cloudtaglist");
var selectedOptions = [];
var allIds = tagSelected.options;
var count = allIds.length;
for(var i=0;i<count;i++){
if(allIds[i].selected){
selectedOptions.push(allIds[i].value);
}
}
var result = selectedOptions.join(",");
if(result){
preDeletedTag(result);
}
else{
alert("'.JText::_('EMPTY_TAG_TO_DELETE').'");
}
}
function deleteTag(ids){
var preDelete = new Request({
url: "'.JURI::base().'index.php?option=com_content&task=rm_ct&format=raw&id='.$id.'",
method: "get",
onSuccess: function(responseText){
var tagSelected = document.getElementById("jform_cloudtaglist");
tagSelected.innerHTML = responseText;
stringTag();
}
});
preDelete.send("wt=delete&confirm=1&tag_ids=" + ids);
}
function stringTag(){
var preString = new Request({
url: "'.JURI::base().'index.php?option=com_content&task=rm_ct&format=raw&id='.$id.'",
method: "get",
onSuccess: function(responseText){
var tagSelected = document.getElementById("jform_cloudtagforarticle");
tagSelected.innerHTML = responseText;
tagSelected.value = responseText;
}
});
preString.send("wt=string");
}
function preDeletedTag(ids){
var preDelete = new Request({
url: "'.JURI::base().'index.php?option=com_content&task=rm_ct&format=raw&id='.$id.'",
method: "get",
onSuccess: function(responseText){
if(responseText == "WITH_ARTICLE"){
if(confirm("'.JText::_('CONFIRM_TEXT_TO_DELETE_TAGS').'")){
deleteTag(ids);
}
}
else{
var tagSelected = document.getElementById("jform_cloudtaglist");
tagSelected.innerHTML = responseText;
stringTag();
}
}
});
preDelete.send("wt=delete&confirm=0&tag_ids=" + ids);
}
window.addEvent("domready", function(){
searchTag.periodical(1000);
});
function searchTag()
{
var maskInput = document.getElementById("searchCloudTag").value;
var cStart = document.getElementById("cStart").value;
var countChars = maskInput.replace(/\s+/g, "").length;
if(countChars != 0)
{
var cStartw = document.getElementById("cStartw").value;
var searchInput = document.getElementById("searchCloudTag").value;
}
else
{
var cStartw = "";
var searchInput ="";
}
if(cStart != countChars || cStartw != searchInput)
{
var preSearch = new Request({
url: "'.JURI::base().'index.php?option=com_content&task=rm_ct&format=raw&id='.$id.'",
method: "get",
onSuccess: function(responseText){
var tagSelected = document.getElementById("jform_cloudtaglist");
tagSelected.innerHTML = responseText;
}
});
preSearch.send("wt=search&sw=" + searchInput);
document.getElementById("cStart").value = countChars;
document.getElementById("cStartw").value = searchInput;
}
}
</script>
';
$html .= "\n<input size=\"45\" placeholder=\"".JText::_('TAGS_SEARCH_TEXT')."\" class=\"searchCloudTag\" type=\"text\" id=\"searchCloudTag\">
<input id=\"cStart\" type=\"hidden\" value=\"0\" />
<input id=\"cStartw\" type=\"hidden\" value=\"\" />
<select class=\"tagcloudstring\" size=\"15\" cols=\"10\" multiple=\"multiple\" id=\"".$this->id."\" name=\"".$this->name."\">";
$pre_counter = 1;
$num_tags = count($tagList);
if($num_tags = 0)
{
$html .= "\n<option>".JText::_('NO_TAGS_ALL')."</option>";
}
else
{
foreach($tagList as $tag)
{
if($pre_counter == 1)$html .= "\n<optgroup label=\"".JText::_('CURREN_ATTACHED_TAGS')."\">";
if($pre_counter == ($num_of_current_tag + 1))$html .= "\n<optgroup label=\"".JText::_('FREE_ATTACHED_TAGS')."\">";
$html .= "\n<option ".($tag->tag_x_content_content_id == $id && $id !== 0?" ":" ondblclick=\"addTheTag(this);\" ")." value=\"".$tag->tag_id."\">".$tag->tag_text."</option>";
if($pre_counter == $num_of_current_tag)$html .= "\n</optgroup>";
if($pre_counter == $num_tags)$html .= "\n</optgroup>";
$pre_counter++;
}
}
$html .= "\n</select>";
$html .= "\n<label></label><input onclick=\"getSelect()\" style=\"background:#eee; padding-top:0px !important; margin-top:0px !important; margin-bottom:15px !important;\" type=\"button\" id=\"dropcloudtag\" value=\"".JText::_('DROP_CLOUD_TAG')."\" />";
}
return $html;
}

public function getLabel() {
return parent::getLabel();
}
}
?>

   И последний штрих это в файле administrator\components\com_content\models\forms\article.xml добавить после первого встретившегося в файле с самого начала тега </fieldset>

<fieldset addfieldpath="/administrator/components/com_content/models/fields/cloudtag" >
<field name="cloudtagforarticle" type="cloudtagforarticle" label="JFIELD_META_CLOUDTAGS_LABEL" description="JFIELD_META_CLOUDTAGS_DESC"/>
<field name="cloudtaglist" type="cloudtaglist" label="JCLOUDTAGSLIST" description="JCLOUDTAGSLIST_DESC" />
</fieldset>

   В итоге заходим в административную часть сайта, а именно в какой то материал (редактирование) и видим слева во вкладке "Метаданные" такие поля:

   Поле поиска тегов - работает на AJAX потому нету кнопки "поиск", ниже список всех тегов внесенных во всех материалах, отделены теги которые прикрепленные к статье в которой вы находитесь, и теги которые к ней не прекреплены (по ним собственно и выполняется поиск и чтобы добавить их к данной статье делаем двойной клик по нужному тегу), и последнее поле это текстовое поле в котором дублируются теги прикрепленные к статье, но здесь вы можете их дописать вручную (собственно так вообщем и наполняются теги), ест-но здесь вы их можете и удалить. Ну еще присутствует кнопка "удалить теги полностью" это теги удаляются со всех статей и везде!



 

Комментарии 

 
# Alex 24.09.2012 09:35
Супер, наконец то, что то бесплатное и адекватное. Хоть немного пришлось потрудиться конечно, но оно того стояло. Спасибо
Ответить | Ответить с цитатой | Цитировать
 
 
# Doroti 26.09.2012 08:09
Спасибо, было немного возни, но справилась:)
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий


Защитный код
Обновить

 

Сторонние

Модуль новостей для Joomla - JU News Ultra
14.11.2011 |  4166
Модуль вывода новостей JU News Ultra - еще один способ...

Новости

BlackBerry Q10 – телефон для фанатов
IT мир
06.06.2013 |  49
Смартфон BlackBerry Q10 весьма недешевый гаджет, стоимость данного устройства составляет...
Раскрутка Lumia 928
IT мир
04.06.2013 |  55
Компания Nokia готовится вплотную заняться рекламой аппарата Lumia 928. Некоторое...
Прокачанные новинки HTC
IT мир
30.05.2013 |  146
На днях известная компания HTC заявила о выпуске сразу 2-х...
Samsung Galaxy Core – Android-смартфон для всех
IT мир
30.05.2013 |  221
Устройство Samsung Galaxy Core позиционируется производителем, как доступный смартфон, обладающий...

посл. Комментарии

Вход