Passo 2 - Database, Backend, Lingue
Inviato da CinziaDesign il
Thank you for your contribution:
Dopo le basi vogliamo ottenere di più.
Vogliamo avere un componente perfettamente funzionante con un backend per aggiungere, modificare e cancellare oggetti, e vogliamo avere file di lingua separati, naturalmente, per avere la possibilità di localizzare il nostro componente. In generale questo non è complicato, ma dobbiamo creare molti file ed è facile perdersi in cartelle, nomi e metodi.
Voglio iniziare con un paio di immagini per darvi un'idea di cosa sto parlando :)
Immagini Cocoate Real Estate (CRE) Versione 0.0.2
Il componente consiste più o meno di due componenti. Uno è responsabile per il Frontend (sito) e uno per l'area amministrazione (admin). E' ancora un semplice componente, senza piacere per l'occhio, ACL, e JavaScript aggiuntivi e tutte le altre cose di fantasia, ma sarà una solida base per scoprire di più.
Sito
Per il momento vogliamo solo avere la possibilità di creare un collegamento ad un oggetto (Figura 1). Più tardi lo potenzieremo.
Figura 1: Una lista nel frontend
Admin
Per poter creare il menu link per il sito abbiamo bisogno di un tipo di voce di menu. (Figura 2).
Figura 2: Tipo di voce di Menu
Dopo aver scelto il tipo di voce di menu dovremo selezionare l'oggetto che vogliamo presentare. Ci sarà una lista di opzioni composta da diversi campi recuperati dal database. Questo passaggio è importante perché nella nostra prima prova abbiamo appena scritto il testo in un file xml. Ecco che la lista opzioni viene creata dinamicamente, a seconda del contenuto nella tabella del nostro database (Figura 3).
Figura 3: Parametri dinamici
Per aggiungere, modificare ed eliminare gli oggetti abbiamo bisogno di una pagina di riepilogo come in Figura 4. Abbiamo bisogno di un titolo, una barra degli strumenti con icone, caselle di controllo e naturalmente di contenuto.
Figura 4: Tabella backend
Quando si fa clic sul link del titolo si dovrebbe essere indirizzati ad un form di modifica. In questo form di modifica, abbiamo bisogno di una diversa barra degli strumenti, campi e naturalmente etichette e descrizione per aiutare l'utente a capire cosa dovrebbe essere fatto (Figura 5). Anche il form dovrebbe apparire quando l'icona Nuovo viene cliccata! Dopo il salvataggio, ci dovrebbe essere un messaggio per l'utente.
Figura 5: Form modifica
In caso di modifica, dovrebbe essere possibile spuntare la casella della riga e fare clic sull'icona di modifica. Se non è selezionata e l'icona modifica viene cliccata, ci dovrebbe essere un messaggio (Figura 6)
Figura 6: Messaggio che nulla è verificato
E, ultimo ma non meno importante, dovrebbe essere possibile eliminare l'oggetto appena aggiunto.
File Cocoate Real Estate Versione 0.0.2
In questa fase abbiamo bisogno di un sacco di file aggiuntivi. Se ancora lavorate con un "semplice" editor di testo, questo può creare un po' di confusione. Vi propongo di installare iil componente dei dati di esempio (link alla fine del capitolo) e passare attraverso tutti i file.
http://cocoate.com/sites/cocoate.com/files/com_coco_real_estate-0.0.2.zip
E' importante tenere presente che la struttura delle cartelle nel pacchetto di installazione è diversa dalla struttura delle cartelle nel CMS Joomla!.
Si prega di prendere tempo e dare uno sguardo alla struttura delle cartelle nel file ZIP (Figura 7) e la struttura dei file dopo l'installazione del CMS (Figura 8).
Figura 7: Struttura cartelle nel pacchetto installazione
Figura 8: Struttura cartelle nel CMS Joomla!
Tabella database cocoaterealestate_objects
Abbiamo bisogno di conservare la nostra lista da qualche parte ed ho avuto un problema chicken and egg quando ho scritto il capitolo. Naturalmente ho scritto due file per l'installazione e la disinstallazione della tabella cocoaterealestate_objects (Lista 1, Lista 2) ma inizialmente ho costruito la tabella manualmente tramite phpMyAdmin.
Dopo che il codice era completo è stato possibile installare il componente e i due file vengono chiamati dal processo di installazione e disinstallazione.
I file contengono comandi puri SQL e di conseguenza l'estensione è .sql. Per farla "semplice" ho strutturato la tabella in modo semplice con campi per il titolo, immagine, descrizione, città, CAP, paese e prezzo. Tenete presente che il comando drop nella parte superiore del file di installazione può cancellare accidentalmente i dati esistenti. A seconda dei vostri progetti di aggiornamento può essere utile o pericoloso. :)
DROP TABLE IF EXISTS `#__cocoaterealestate_objects`; CREATE TABLE `#__cocoaterealestate_objects` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `uid` int(10) unsigned NOT NULL DEFAULT '0', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `published` tinyint(1) unsigned NOT NULL DEFAULT '0', `ordering` int(10) unsigned NOT NULL DEFAULT '0', `image` varchar(255) NOT NULL DEFAULT '', `meta_descr` varchar(250) DEFAULT NULL, `meta_keys` varchar(250) DEFAULT NULL, `title` varchar(200) NOT NULL DEFAULT '', `description` text, `city` varchar(100) NOT NULL DEFAULT '', `zip` varchar(50) NOT NULL DEFAULT '', `country` varchar(100) NOT NULL DEFAULT '', `price` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; INSERT INTO `#__cocoaterealestate_objects` VALUES(1, 42, '2011-11-29 15:39:10', 1, 0, 'http://farm4.staticflickr.com/3100/2724105775_4d039b4127.jpg', NULL, NULL, 'First House', 'Sed id leo metus, ut mollis mi. Etiam malesuada ornare felis, vel imperdiet eros cursus sollicitudin. Nulla viverra, neque sodales porttitor accumsan, felis purus varius libero, eu posuere odio risus ac nisl. Proin quis eros ipsum, sit amet pretium eros? Proin at purus cras amet.\r\n', 'Fitou', '11510', 'France', 85000); INSERT INTO `#__cocoaterealestate_objects` VALUES(2, 42, '2011-11-29 15:39:10', 1, 0, 'http://farm6.staticflickr.com/5298/5489897350_eaf091d99b.jpg', NULL, NULL, 'Second House', 'bumsclabe laber Sed id leo metus, ut mollis mi. Etiam malesuada ornare felis, vel imperdiet eros cursus sollicitudin. Nulla viverra, neque sodales porttitor accumsan, felis purus varius libero, eu posuere odio risus ac nisl. Proin quis eros ipsum, sit amet pretium eros? Proin at purus cras amet.\r\n', 'Fitou', '11510', 'France', 100000);
Lista 1: /administrator/components/com_cocoaterealestate/sql/install.mysql.utf8.sql
DROP TABLE IF EXISTS `#__cocoaterealestate_objects`;
Lista 2: /administrator/components/com_cocoaterealestate/sql/uninstall.mysql.utf8.sql
Modelli, Tabelle, Campi, File di lingua
Accanto alla tabella del database stesso abbiamo bisogno di una tabella classe e vari modelli per gestire le necessità del nostro componente.
Tabella classe
La tabella classe risiede nell'area amministratore del CMS /administrator/components/com_cocoate_realestate/tables/objects.php (Lista 3). E' possibile definire tutte le tabelle di cui avete bisogno. Il nome della classe consiste di un prefisso (CocoateRealestateTable) e di un nome virtuale della tabella(Objects). Un'istanza di questa classe rappresenta una riga nella tabella del database che significa una lista di case.
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.database.table');
class CocoateRealestateTableObjects extends JTable
{
var $id = null;
var $title = null;
var $city = null;
var $price = null;
var $published = 0;
function __construct(&$db)
{
parent::__construct('#__cocoaterealestate_objects', 'id', $db);
}
}
?>
Lista 3: /administrator/components/com_cocoate_realestate/tables/objects.php
Modello - Frontend
La cosa interessante è che possiamo creare un collegamento per un singolo oggetto (Figura 1). Perciò abbiamo bisogno di un modello per UNA riga (un oggetto/lista casa). E' importante distinguere tra una lista casa singola e lista/tabella di liste di case. In Joomla! noi chiamiamo il file modello in un modo singolare, se vogliamo UNA voce (object.php) e in modo plurale, se vogliamo una lista di voci (objects.php). Il nome del modello deve essere simile al nome della cartella vista.
Nel nostro caso il nome della cartella vista è object così noi chiamiamo anche il file modello object.php (Lista 4).
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
jimport('joomla.application.component.modelitem');
class CocoateRealEstateModelObject extends JModelItem
{
protected $item;
public function getItem()
{
if (!isset($this->item)) {
$id = JRequest::getInt('id');
// Get a TableObject instance
$table = $this->getTable('Objects', 'CocoateRealEstateTable');
// Load the object
$table->load($id);
// Assign the data
$this->item['id'] = $table->id;
$this->item['image'] = $table->image;
$this->item['title'] = $table->title;
$this->item['city'] = $table->city;
$this->item['zip'] = $table->zip;
$this->item['country'] = $table->country;
$this->item['price'] = $table->price;
}
return $this->item;
}
}
?>
Lista 4: /components/com_cocoate_realestate/models/object.php
Modello/Campo - Backend
Il punto di vista relativo al modello oggetto necessita di una sorta di rapporto con questo modello. Questo è fatto da una voce in un file xml chiamato /components/cocoaterealestate/views/object/tmpl/default.xml (Lista 5). L'attributo importante è addfieldpath. Le PAROLE IN LETTERE MAIUSCOLE sono variabili per i file di lingua.
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_COCOATEREALESTATE_OBJECT_VIEW_DEFAULT_TITLE">
<message>COM_COCOATEREALESTATE_OBJECT_VIEW_DEFAULT_DESC</message>
</layout>
<fields name="request" addfieldpath="/administrator/components/com_cocoaterealestate/models/fields">
<fieldset name="request">
<field
name="id"
type="object"
extension="com_cocoaterealestate"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_OBJECT_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_OBJECT_LABEL"
required="true"
/>
</fieldset>
</fields>
</metadata>
Lista 5: /components/cocoaterealestate/views/object/tmpl/default.xml
File di lingua
I file di lingua non hanno niente a che fare con i modelli, ma voglio citarli adesso perché abbiamo bisogno di loro ed ho già usato le variabili linguistiche (QUELLI CON LE LETTERE MAIUSCOLE).
Il file di lingua per il frontend dovrebbe essere /language/en-GB/en-GB.com_cocoaterealestate.ini. Il nome del file per la lingua Tedesca dovrebbe essere /language/de-DE/de-DE.com_cocoaterealestate.ini. Al momento non abbiamo bisogno di stringhe di testo per il frontend.
I due file di lingua per il backend sono memorizzati nella cartella /administrator/language/en-GB/. Uno si chiama en-GB.com_cocoaterealestate.sys.ini (Lista 6) e l'altro è chiamato en-GB.com_cocoaterealestate.ini (Lista 7). Il file sys.ini sarà usato durante il processo di installazione, nei menu della gestione estensioni, un'altra lingua. Esso contiene molte meno stringhe di traduzione e questo file viene caricato in scenari in cui la componente caricata non è di per sè com_cocoaterealestate ma la minima traduzione è ancora necessaria.
COM_COCOATEREALESTATE="Cocoate Real Estate" COM_COCOATEREALESTATE_DESCRIPTION="House listings on your website." COM_COCOATEREALESTATE_OBJECT_VIEW_DEFAULT_TITLE="Single object" COM_COCOATEREALESTATE_OBJECT_VIEW_DEFAULT_DESC="This view displays a single object" COM_COCOATEREALESTATE_MENU="Cocoate Real Estate"
Lista 6: /administratorlanguage/en-GB/en-GB.com_cocoaterealestate.sys.ini
COM_COCOATEREALESTATE_OBJECT_FIELD_OBJECT_DESC="This object will be displayed" COM_COCOATEREALESTATE_OBJECT_FIELD_OBJECT_LABEL="Object" COM_COCOATEREALESTATE_OBJECT_HEADING_ID="ID" COM_COCOATEREALESTATE_OBJECT_HEADING_OBJECT="Object" COM_COCOATEREALESTATE_OBJECT_HEADING_TITLE="Title" COM_COCOATEREALESTATE_OBJECT_HEADING_COUNTRY="Country" COM_COCOATEREALESTATE_OBJECT_HEADING_CITY="City" COM_COCOATEREALESTATE_OBJECT_HEADING_IMAGE="Image" COM_COCOATEREALESTATE_OBJECT_HEADING_ZIP="ZIP" COM_COCOATEREALESTATE_OBJECT_HEADING_PRICE="Price" COM_COCOATEREALESTATE_MANAGER_OBJECTS="CocoateRealEstate manager" COM_COCOATEREALESTATE_MANAGER_OBJECT_NEW="CocoateRealEstate manager: New Object" COM_COCOATEREALESTATE_MANAGER_OBJECT_EDIT="CocoateRealEstate manager: Edit Object" COM_COCOATEREALESTATE_N_ITEMS_DELETED_1="One object deleted" COM_COCOATEREALESTATE_N_ITEMS_DELETED_MORE="%d objects deleted" COM_COCOATEREALESTATE_OBJECT_DETAILS="Object Details" COM_COCOATEREALESTATE_OBJECT_FIELD_TITLE_LABEL="Title" COM_COCOATEREALESTATE_OBJECT_FIELD_TITLE_DESC="Title" COM_COCOATEREALESTATE_OBJECT_FIELD_IMAGE_LABEL="Image" COM_COCOATEREALESTATE_OBJECT_FIELD_IMAGE_DESC="Please paste a URL" COM_COCOATEREALESTATE_OBJECT_FIELD_ZIP_LABEL="ZIP" COM_COCOATEREALESTATE_OBJECT_FIELD_ZIP_DESC="Enter ZIP code" COM_COCOATEREALESTATE_OBJECT_FIELD_CITY_LABEL="City" COM_COCOATEREALESTATE_OBJECT_FIELD_CITY_DESC="City" COM_COCOATEREALESTATE_OBJECT_FIELD_COUNTRY_LABEL="Country" COM_COCOATEREALESTATE_OBJECT_FIELD_COUNTRY_DESC="Country" COM_COCOATEREALESTATE_OBJECT_FIELD_PRICE_LABEL="Price" COM_COCOATEREALESTATE_OBJECT_FIELD_PRICE_DESC="Enter price"
Lista 7: /administratorlanguage/en-GB/en-GB.com_cocoaterealestate.ini
Modelli, Campi e Forms - Backend
Il parametro campo per scegliere l'oggetto giusto per il collegamento del menu ha bisogno di un rapporto con il modello. Quindi creiamo una cartella fields all'interno della cartella models. In questa cartella memorizziamo la struttura del parametro campo e lo chiamiamo object.php (Lista 8).
<?php
defined('_JEXEC') or die;
jimport('joomla.form.helper');
JFormHelper::loadFieldClass('list');
class JFormFieldObject extends JFormFieldList
{
protected $type = 'Object';
protected function getOptions()
{
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('id,title,price,city');
$query->from('#__cocoaterealestate_objects');
$db->setQuery((string)$query);
$titles = $db->loadObjectList();
$options = array();
if($titles){
foreach($titles as $title)
{
$options[] = JHtml::_('select.option', $title->id, $title->id.' '.$title->city.' '.$title->title.' '.money_format('%i', $title->price));
}
}
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
Lista 8: /administrator/components/com_cocoate_realestate/models/fields/object.php
Nel backend abbiamo una pagina di riepilogo (Figura 4) e un modulo per modificare e aggiungere un singolo oggetto (Figura 5). Per questo motivo abbiamo bisogno di due modelli - object.php e objects.php (Lista 9 and Lista 10)
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.modeladmin');
class CocoateRealEstateModelObject extends JModelAdmin
{
public function getForm($data = array(), $loadData = true)
{
// Get the form.
$form = $this->loadForm('com_cocoaterealestate.object', 'object', array('control' => 'jform', 'load_data' => $loadData));
return $form;
}
protected function loadFormData()
{
// Check the session for previously entered form data.
$data = JFactory::getApplication()->getUserState('com_cocoaterealestate.edit.object.data', array());
if(empty($data)){
$data = $this->getItem();
}
return $data;
}
public function getTable($name = 'Objects', $prefix = 'CocoateRealEstateTable', $options = array())
{
return parent::getTable($name, $prefix, $options);
}
}
Lista 9: /administrator/components/com_cocoate_realestate/models/object.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.modellist');
class CocoateRealestateModelObjects extends JModelList
{
protected function getListQuery()
{
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// Select some fields
$query->select('id,title,city,country,price');
// From the realestate table
$query->from('#__cocoaterealestate_objects');
return $query;
}
}
?>
Lista 10: /administrator/components/com_cocoate_realestate/models/objects.php
Per aggiungere un oggetto/lista abbiamo bisogno anche di un modulo. L'estensione dei file per i moduli è .xml ed il nome è lo stesso del nome della vista dove è necessario il modulo. Nel nostro caso è di nuovo il nome object (Lista 11)
<?xml version="1.0" encoding="utf-8"?>
<form>
<fieldset>
<field
name="id"
type="hidden"
/>
<field
name="title"
type="text"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_TITLE_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_TITLE_DESC"
size="40"
class="inputbox"
default=""
/>
<field
name="image"
type="text"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_IMAGE_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_IMAGE_DESC"
size="40"
class="inputbox"
default=""
/>
<field
name="zip"
type="text"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_ZIP_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_ZIP_DESC"
size="40"
class="inputbox"
default=""
/>
<field
name="city"
type="text"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_CITY_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_CITY_DESC"
size="40"
class="inputbox"
default=""
/>
<field
name="country"
type="text"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_COUNTRY_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_COUNTRY_DESC"
size="40"
class="inputbox"
default=""
/>
<field
name="price"
type="text"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_PRICE_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_PRICE_DESC"
size="40"
class="inputbox"
default=""
/>
</fieldset>
</form>
Lista 11: /administrator/components/com_cocoate_realestate/models/forms/objects.xml
I Controller
I controller sono necessari per decidere cosa fare dopo. Se si fa clic sull'icona Nuovo per aggiungere una lista casa, un controller deve trovare il modo giusto su cosa fare dopo. In totale usiamo quattro controller al momento.
- Uno per il frontend (/component/com_cocoaterealestate/controller.php - lista 12)
- Un controller generico con un'opzione predefinita (nel nostro caso oggetti) per il backend (/administrator/component/com_cocoaterealestate/controller.php - lista 13)
- Due controller per il backend per la lista vista (/administrator/component/com_cocoaterealestate/controllers/objects.php - lista 14) e per la vista singola (/administrator/component/com_cocoaterealestate/controllers/object.php - lista 15).
/component/com_cocoaterealestate/controller.php
Questo controller non fa nulla in questo momento. Deve semplicemente essere là (Lista 12)
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.controller');
class CocoateRealestateController extends JController
{
}
Lista 12: /administrator/component/com_cocoaterealestate/controller.php
/administrator/component/com_cocoaterealestate/controller.php
Anche il controller deve essere lì, ma in questo caso abbiamo due punti di vista, così una delle due deve essere predefinita. Il controller imposta la vista predefinita agli objects.
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.controller');
class CocoateRealestateController extends JController
{
function display($cachable = false)
{
// Set default view if not set
JRequest::setVar('view', JRequest::getCmd('view', 'objects'));
parent::display($cachable);
}
}
?>
Lista 13: /administrator/component/com_cocoaterealestate/controller.php
administrator/component/com_cocoaterealestate/controllers/objects.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.controlleradmin');
class CocoateRealestateControllerObjects extends JControllerAdmin
{
public function getModel($name = 'Object', $prefix = 'CocoateRealestateModel') {
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
}
Lista 14 /administrator/component/com_cocoaterealestate/controllers/objects.php
administrator/component/com_cocoaterealestate/controllers/object.php
Questo controller deve essere lì, ma può rimanere vuoto.
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.controllerform');
class CocoateRealestateControllerObject extends JControllerForm
{
}
Lista 15 /administrator/component/com_cocoaterealestate/controllers/object.php
Viste in frontend e backend
Nel nostro esempio abbiamo tre punti di vista:
- La vista oggetto nel frontend (Figura 1) visualizza un singolo oggetto. Consiste di tre file:
/component/com_cocoaterealestate/views/object/view.html.php (Lista 16)
/component/com_cocoaterealestate/views/object/tmpl/default.php (Lista 17)
/component/com_cocoaterealestate/views/object/tmpl/default.xml (Lista 18) (Ho già nominato quel file sopra) - La vista oggetti nel backend (Figura 4) visualizza una lista di oggetti/case. Consiste di cinque file:
/administrator/component/com_cocoaterealestate/views/object/view.html.php (Lista 19)
/administrator/component/com_cocoaterealestate/views/object/tmpl/default.php (Lista 20)
/administrator/component/com_cocoaterealestate/views/object/tmpl/default_body.php (Lista 21)
/administrator/component/com_cocoaterealestate/views/object/tmpl/default_foot.php (Lista 22)
/administrator/component/com_cocoaterealestate/views/object/tmpl/default_head.php (Lista 23) - The object view in the backend (Figura 5) displaying the form. It consists of two files
/administrator/component/com_cocoaterealestate/views/object/view.html.php (Lista 24)
/administrator/component/com_cocoaterealestate/views/object/tmpl/edit.php (Lista 25)
La struttura dei punti di vista è molto importante. Il file view.html.php raccoglie dati dal modello e lo fornisce come variabili per il "vero" template chiamato default.php. Il file default.php è fatto per i Progettisti ed è sovrascrivibile da ogni template Joomla! (Leggi di più nel Capitolo Sovrascrizione Template). Dovrebbe contenere solo markup arricchito con variabili PHP.
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.view');
class CocoateRealestateViewObject extends JView
{
protected $item;
function display($tpl = null)
{
// Assign data to the view
//$this->item = 'Cocoate Realestate';
$this->item = $this->get('item');
// Display the view
parent::display($tpl);
}
}
Lista 16: /component/com_cocoaterealestate/views/object/view.html.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
?>
<h1><?php echo $this->item['title']; ?></h1>
<img src="<?php echo $this->item['image']; ?>">
<ul>
<li>
<?php echo $this->item['zip']; ?>
<?php echo $this->item['city']; ?>,
<?php echo $this->item['country']; ?>
</li>
<li>
<strong><?php echo $this->item['price']; ?> €</strong>
</li>
</ul>
<pre>
<?php
// uncomment the next line to see the array
// print_r($this->item); ?>
</pre>
Lista 17: /component/com_cocoaterealestate/views/object/tmpl/default.php
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_COCOATEREALESTATE_OBJECT_VIEW_DEFAULT_TITLE">
<message>COM_COCOATEREALESTATE_OBJECT_VIEW_DEFAULT_DESC</message>
</layout>
<fields name="request" addfieldpath="/administrator/components/com_cocoaterealestate/models/fields">
<fieldset name="request">
<field
name="id"
type="object"
extension="com_cocoaterealestate"
label="COM_COCOATEREALESTATE_OBJECT_FIELD_OBJECT_LABEL"
description="COM_COCOATEREALESTATE_OBJECT_FIELD_OBJECT_LABEL"
required="true"
/>
</fieldset>
</fields>
</metadata>
Lista 18: /component/com_cocoaterealestate/views/object/tmpl/default.xml
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.view');
class CocoateRealestateViewObjects extends JView
{
function display($tpl = null)
{
// Get data from the model
$items = $this->get('Items');
$pagination = $this->get('Pagination');
// Assign data to the view
$this->items = $items;
$this->pagination = $pagination;
// Set the toolbar
$this->addToolBar();
// Display the template
parent::display($tpl);
}
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_COCOATEREALESTATE_MANAGER_OBJECTS'));
JToolBarHelper::deleteListX('', 'objects.delete');
JToolBarHelper::editListX('object.edit');
JToolBarHelper::addNewX('object.add');
}
}
?>
Lista 19: /administrator/component/com_cocoaterealestate/views/object/view.html.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_cocoaterealestate'); ?>" method="post" name="adminForm">
<table class="adminlist">
<thead><?php echo $this->loadTemplate('head');?></thead>
<tfoot><?php echo $this->loadTemplate('foot');?></tfoot>
<tbody><?php echo $this->loadTemplate('body');?></tbody>
</table>
<div>
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Lista 20: /administrator/component/com_cocoaterealestate/views/object/tmpl/default.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
?>
<?php foreach($this->items as $i => $item): ?>
<tr class="row<?php echo $i % 2; ?>">
<td><?php echo $item->id; ?></td>
<td><?php echo JHtml::_('grid.id', $i, $item->id); ?></td>
<td>
<a href="<?php echo JRoute::_('index.php?option=com_cocoaterealestate&task=object.edit&id=' . $item->id); ?>">
<?php echo $item->title; ?>
</a>
</td>
<td><?php echo $item->city; ?></td>
<td><?php echo $item->country; ?></td>
<td><?php echo $item->price; ?></td>
</tr>
<?php endforeach; ?>
Lista 21: /administrator/component/com_cocoaterealestate/views/object/tmpl/default_body.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
?>
<tr>
<td colspan="6"><?php echo $this->pagination->getListFooter(); ?></td>
</tr>
Lista 22: /administrator/component/com_cocoaterealestate/views/object/tmpl/default_foot.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
?>
<tr>
<th width="5">
<?php echo JText::_('COM_COCOATEREALESTATE_OBJECT_HEADING_ID'); ?>
</th>
<th width="20">
<input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count($this->items); ?>);" />
</th>
<th>
<?php echo JText::_('COM_COCOATEREALESTATE_OBJECT_HEADING_TITLE'); ?>
</th>
<th>
<?php echo JText::_('COM_COCOATEREALESTATE_OBJECT_HEADING_CITY'); ?>
</th>
<th>
<?php echo JText::_('COM_COCOATEREALESTATE_OBJECT_HEADING_COUNTRY'); ?>
</th>
<th>
<?php echo JText::_('COM_COCOATEREALESTATE_OBJECT_HEADING_PRICE'); ?>
</th>
</tr>
Lista 23: /administrator/component/com_cocoaterealestate/views/object/tmpl/default_head.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
jimport('joomla.application.component.view');
class CocoateRealestateViewObject extends JView
{
public function display($tpl = null)
{
// get the Data
$form = $this->get('Form');
$item = $this->get('Item');
// Assign the Data
$this->form = $form;
$this->item = $item;
// Set the toolbar
$this->addToolBar();
// Display the template
parent::display($tpl);
}
protected function addToolBar()
{
JRequest::setVar('hidemainmenu', true);
$isNew = ($this->item->id == 0);
JToolBarHelper::title($isNew ? JText::_('COM_COCOATEREALESTATE_MANAGER_OBJECT_NEW') : JText::_('COM_COCOATEREALESTATE_MANAGER_OBJECT_EDIT'));
JToolBarHelper::save('object.save');
JToolBarHelper::cancel('object.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE');
}
}
Lista 24: /administrator/component/com_cocoaterealestate/views/object/view.html.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
JHtml::_('behavior.tooltip');
?>
<form action="<?php echo JRoute::_('index.php?option=com_cocoaterealestate&layout=edit&id='.(int) $this->item->id); ?>"
method="post" name="adminForm" id="object-form">
<fieldset class="adminform">
<legend><?php echo JText::_('COM_COCOATEREALESTATE_OBJECT_DETAILS'); ?></legend>
<ul class="adminformlist">
<?php foreach($this->form->getFieldset() as $field): ?>
<li><?php echo $field->label;echo $field->input;?></li>
<?php endforeach; ?>
</ul>
</fieldset>
<div>
<input type="hidden" name="task" value="object.edit" />
<?php echo JHtml::_('form.token'); ?>
</div>
</form>
Lista 25: /administrator/component/com_cocoaterealestate/views/object/tmpl/edit.php























2 Comments
Non trovo il link allo zip
Inviato da lordmax il
Non trovo il link allo zip dei file.
http://cocoate.com/sites/cocoate.com/fil...
I will check it ... Hagen
Inviato da concierge il
I will check it ...
Hagen