Home Документация Документи за разработчици Advanced configuration of Content Elements
Advanced configuration of Content Elements ПДФ Печат Е-мейл
Написано от Ivo Apostolov   
Четвъртък, 26 Април 2007 00:50
There are no translations available.

One major enhancement in Joomfish is that it is possible to add translation filters to content element files. For example look at the full version of content.xml:

<?xml version="1.0" ?>
<joomfish type="contentelement">
<name>Contents</name>
<author>A. Kempkens</author>
<version>1.7</version>
<description>Definition for the core content component</description>
<reference type="content">
  <table name="content">
  <field type="referenceid" name="id" translate="0">ID</field>
  <field type="titletext" name="title" translate="1">Title</field>
  <field type="text" name="title_alias" translate="0">Title Alias</field>
  <field type="htmltext" name="introtext" translate="1">Introtext</field>
  <field type="htmltext" name="fulltext" translate="1">Fulltext</field>
  <field type="text" name="images" translate="1">Images</field>
  <field type="text" name="metakey" translate="1">Metakey</field>
  <field type="text" name="metadesc" translate="1">Metadesc</field>
  <field type="created_date" name="created" translate="0">Created</field>
  <field type="modified_date" name="modified" translate="0">Modified</field>
  <field type="checked_out_by" name="checked_out" translate="0">Check out by</field>
  <field type="checked_out_date" name="checked_out_time" translate="0">Check out date</field>
  <filter>c.state >= 0</filter>
  </table>
  </reference>
<translationfilters>
    <category>catid</category>
    <author>created_by</author>
    <keyword>title</keyword>
    <published>published</published>
  </translationfilters>

</joomfish>

The section in red tells Joomfish to implement a category name filter where the database content table field representing the category id is catid and so on.

The builtin filters (that can be used for other content types) are:

 

filter typedescription
categoryfilter based on category name
authorfilter based on author name
keywordfilter based on keyword value. The field in this case is the field to search for the keyword
publishedfilter based on whether a translation has been published (in a given language)

It is possible to add custom filters for 3rd party components. Consider the example of VirtueMart products. The contentelement file reads as follows:

<?xml version="1.0" ?> <joomfish type="contentelement">   <name>VirtueMart Product</name>   <author>EI</author>   <version>1.0</version>   <description>Definition for VirtueMart component (Products)</description>   <reference>   	<table name="vm_product">   		<field type="referenceid" name="product_id" translate="0">ID</field>   		<field type="titletext" name="product_name" translate="1">Title</field>   		<field type="textarea" name="product_s_desc" translate="1">Short description</field>   		<field type="htmltext" name="product_desc" translate="1">Description</field>   		<field type="created_date" name="cdate" translate="0">Created</field>   		<field type="modified_date" name="mdate" translate="0">Modified</field>   	</table>   </reference>   <translationfilters>   	  <vm_category>category_id</vm_category>   </translationfilters>  	   </joomfish> 

You only need to add a file called translationVm_categryFilter.php into the content element folder and your translation filters are automatically implemented. As an example this file is attached.

Rules:

  • The file and classname should start with "translation" and end with "Filter"
  • The middle portion of the name should match the xml tag in the contentelement file
  • 3 Methods should be implemented:

 

contructorThis can generally be modelled on other examples, changing the names accordingly
_createFilterThis is a portion of an SQL query that finds translations. The return value will be a WHERE clause in this query (you should not add the WHERE part of this query)
createfilterHTMLThis created the HTML part of the filter, it can be a textbox, select list etc. Use the builtin examples and the VirtueMart attachment for more guidance.

Enjoy !!

Geraint Edwards 27 March 2006

<?php

class translationVm_categoryFilter extends translationFilter
{
 function translationVm_categoryFilter ($contentElement){
  $this->filterNullValue=-1;
  $this->filterType="vm_category";
  $this->filterField = $contentElement->getFilter("vm_category");
  parent::translationFilter($contentElement);
 }
 
 function _createFilter(){
  global $database;
  if (!$this->filterField ) return "";
  $filter="";
  if ($this->filter_value!=$this->filterNullValue){
   // get list of product_id in the appropriate category
   $sql = "SELECT xref.product_id FROM #__vm_product_category_xref as xref"
   ." WHERE xref.category_id=$this->filter_value";
   $database->setQuery($sql);
   $prodids = $database->loadObjectList();
   $idstring = "";
   foreach ($prodids as $pid){
    if (strlen($idstring)>0) $idstring.=",";
    $idstring.=$pid->product_id;
   }
   $filter = "c.product_id IN($idstring)";
  }
  return $filter;
 }
 
 /**
 * Creates vm_category filter
 *
 * @param unknown_type $filtertype
 * @param unknown_type $contentElement
 * @return unknown
 */
 function _createfilterHTML(){
  global $database;
  if (!$this->filterField) return "";
  $categoryOptions=array();
  $categoryOptions[] = mosHTML::makeOption( '-1',_JOOMFISH_ADMIN_CATEGORY_ALL );
  $sql = "SELECT DISTINCT cat.category_id, cat.category_name FROM #__vm_category as cat,"
     ." #__".$this->tableName." as c, #__vm_product_category_xref as xref"
     ." WHERE c.product_id=xref.product_id AND xref.".$this->filterField."=cat.category_id ORDER BY cat.category_name";
  $database->setQuery($sql);
  $cats = $database->loadObjectList();
  $catcount=0;
  foreach($cats as $cat){
   $categoryOptions[] = mosHTML::makeOption( $cat->category_id,$cat->category_name);
   $catcount++;
  }
  $categoryList=array();
  $categoryList["title"]=_JOOMFISH_ADMIN_CATEGORY;
  $categoryList["html"] = mosHTML::selectList( $categoryOptions, 'vm_category_filter_value', 'class="inputbox" size="1" onchange="document.adminForm.submit();"', 'value', 'text', $this->filter_value );
  return $categoryList;
 }
}
?>
 

0 Comments

Add Comment

Joom!Fish 2.0 Stable download

Избрани сътрудници

От екипа на Джум!Фиш (Алекс, Герайнт, Иво & Робин), голямо благодарим към цялата Джум!Фиш общност. Специални благодарност за тестването, предложенията, преводите и модерирането към:

  • Томи Уай за сладкото лого
  • Бернхард, Майкъл, Люк, Оливие, Робин, Руне, Акаравут
  • Хари (Тасу) за модерирането

Recommended Reading

Buy Joomla! 1.5 with directshopper