Ici on est dans un cas ou:
- On a 2 radio-box par ligne (et seulement 2)
- Au moins l'une des 2 radio-box doit être sélectionnée
- Si erreur on met le focus sur la 1ère radio du champ
- Si erreur on affiche un message d'erreur à partir du texte d'un div caché
function control_questionnaire() { checked = false; jQuery(":radio:even", form).each ( function(intIndex) { radio = jQuery(this); checked = jQuery(":radio[@name='" + radio.attr('name') + "']:checked", form).size(); if (checked == false) { radio.focus(); showFocus(jQuery("#anim_" + radio.attr('id'))); alert(jQuery("#control_" + radio.attr('id')).html()); return false; } } ); if (checked) { jQuery('#loading-indicator').show(); jQuery('#diag-form').submit(); } }
Cette fois ci on est dans un cas ou:
- On a un nombre de questions quelconque
- On a un nombre de réponses quelconque, chaque réponse étant représentée par une checkbox
- On peut cocher plusieurs réponses par question
- Au moins l'une des checkbox doit être sélectionnée
- Si erreur on met le focus sur la 1ère checkbox du champ
- Si erreur on affiche un message d'erreur à partir du texte d'un div caché
function control_questionnaire_complexe() { checked = false; name = ''; jQuery(":checkbox", form).each ( function(intIndex) { checkbox = jQuery(this); // Controle si seulement on a pas deja controle le groupe de checkbox if (name != checkbox.attr('name')) { checked = jQuery(":checkbox[@name='" + checkbox.attr('name') + "']:checked", form).size(); if (checked == false) { checkbox.focus(); answer_id = checkbox.attr('id').split('_'); showFocus(jQuery("#anim_" + answer_id[0])); alert(jQuery("#control_" + answer_id[0]).html()); return false; } name = checkbox.attr('name'); } } ); if (checked) { jQuery('#loading-indicator').show(); jQuery('#diag-form').submit(); } }
This snippet is deprecated, please use the sfJoomla15BridgePlugin plugin witch works with the new 1.5 Joomla and the symfony 1.2 version.
Well, in fact i have taken the idea from what has already been done with cakePHP, you can find the original blog articles here (1) and thanks to the authors for the work. Now a full project for this purpose is available for cakePHP it is called Jake
(1)
Versions used :
Joomla 1.0.12 stable
Install the plugin (check the plugin Wiki page in Symfony )
Now you must have a sfJoomlaBridge dir in your plugins dir and a com_symfony dir in /web/components
The Symfony application is built as usual and the Joomla installation must be achieved in the /web of the Symfony project.
Open symfony.html.php, line 8 modify the name of Symfony controller file (frontoffice.php by default). Take care to use a production controller, because we should't have any debug information
Un-comment line 34 with file_get_contents if you don't have curl installed on you web server, and comment the curl related line above.
In index.php of Joomla
before (near line 114)
// mainframe is an API workhorse, lots of 'core' interaction routines $mainframe = new mosMainFrame( $database, $option, '.' ); $mainframe->initSession();
add
//Before Joomla initialize its mainframe, lets play… // check missing component — added before $mainframe is being initialized //########################## if (!file_exists($mosConfig_absolute_path . '/components/'. $option )) { $option = 'com_symfony'; //set component to com_cake if a controller is not found. }
Clear the cache
> symfony clear cc
There is nothing really specific except the new link helper to use in the templates. To use the Joomla helpers :
<?php use_helper('Joomla'); ?>
You can also modify the index file of Joomla application in plugins/sfJoomlaBridge/config/config.php
We are going to do a page (module/action) whitch will be called by Joomla with the help of its new component.
Nous are going to create 2 actions, 1 basic (static content) and one with the users list of Joomla administration
index/actions/actions.class.php
/** * Executes index action */ public function executeIndex() { } /** * Test Joomla/Symfony integration * * @author lvernet * @since 26 feb 2007 */ public function executeUsers() { $this->users = JosUsersPeer::doSelect(new Criteria()); }
The plugin introduce a new helper link_to_joomla that allows to do link to others symfony pages but with staying in the Joomla application.
templates/usersSuccess.php
<?php use_helper('Joomla'); ?> <h1>Joomla Users list</h1> <p>This list is retrieved with the help of the ORM of Symfony</p>
<?php if ($users): ?> <table class="contenttoc"> <thead> <th>Id</th> <th>Name</th> <th>User name</th> </thead> <?php foreach($users as $user): ?> <tr> <td><?php echo $user->getId(); ?></td> <td><?php echo $user->getName(); ?></td> <td><?php echo $user->getUsername(); ?></td> </tr> <?php endforeach; ?> </table> <?php endif; ?>
<?php echo link_to_joomla('Back to index', 'index/index', array('query_string' => 'param1=chat¶m2=rat')); ?>
templates/indexSuccess.php
<?php use_helper('Joomla'); ?> <h1>This content is provided through Symfony framework.</h1> <?php echo image_tag('powered_by.png') ?> && <?php echo image_tag('http://www.symfony-project.com/images/symfony_logo.gif') ?>
<?php echo link_to_joomla('Users list', 'index/users'); ?>
Now we must desactivate the view's layout, because we don't want it as we will use the one of Joomla.
In index/config/view.yml :
indexSuccess: has_layout: off usersSuccess: has_layout: off
We can now call our sf pages in Joomla, link are formed as following : index.php?option=index&task=users
Go to the url: http://projectroot/index.php?option=index&task=users, the users list is displayed and you have a link to go to the index page (link created with the joomla helper)
/!\ Be carefull, the option param should not match the name of a Joomla component /!\
Has to be updated for symfony 1.1
I made this quiet quickly, of course there are lot of things to do to have a perfect integration as the Jake project does it for cakePHP. If someone is interested, feel free to take the code and contribute, it would be nice.
COil :)
public function allowExtraFields() { $this->validatorSchema->setOption('allow_extra_fields', true); }
Zipper le répertoire test tous ces fichiers et sous-répertoires.
zip -r test.zip test
Pour décompresser, simplement faire unzip sur l'archive.
unzip test.zip
Dans WAMP,par défaut la gestion des sous-domaines n'est pas activée; pour ce faire vous devez ajouter la directive NameVirtualHost. Mais aussi surtout ajouter une entrée vhost pour le domaine locahost sinon quand vous accéderez à cette adresse vous ne verrez pas le site correspondant à votre racine web (typiquement /www) mais le site correspondant au 1er vhost que vous aurez déclaré. Ce qui est assez gênant. (modifications à faire dans le fichier httpd.conf)
NameVirtualHost *:80 # Root localhost <VirtualHost *:80> ServerName localhost DocumentRoot "d:\wamp\www" DirectoryIndex index.php <Directory "C:\wamp\www"> AllowOverride All </Directory> </VirtualHost> ## projet 1 ## <VirtualHost *:80> ServerName dev.projet1.com DocumentRoot "d:\wamp\www\projet1\web" DirectoryIndex index.php <Directory "C:\wamp\www\projet1\web"> AllowOverride All </Directory> </VirtualHost> ## projet 2 ## <VirtualHost *:80> ServerName dev.projet2.com DocumentRoot "d:\wamp\www\projet2\web" DirectoryIndex index.php <Directory "C:\wamp\www\projet2\web"> AllowOverride All </Directory> </VirtualHost>
Ne pas oublier non plus d'ajouter les entrées 'ServerName' dans votre fichiers hosts (/etc/hosts ou /windows/system32/drivers/etc/hosts).
127.0.0.1 dev.projet1.com, dev.projet2.com
Ici je mets tout les sites en vrac dans le fichier httpd.conf car sous windows.. Mais sous Unix on préférera évidemment faire des fichiers distincts pour chaque sous-domaine déclaré. (typiquement dans /etc/apache2/sites-available)
[Edit 06/02/09] Enabling the apache mod_rewrite is a little faster than using this snippet. ;)
Well if you are using Windows + Wamp for your dev, the "noscript" setting (settings.yml) does not work well when you are using the prod controller to test your application with you dev computer. (if mod_rewrite is not installed)
So i wanted to deactivate this settings in dev environment with the prod controller and having it on in prod with the prod controller without having 2 different settings.yml files.
So here here a small tip for this:
prod:
.settings:
no_script_name: echo ((isset($_SERVER['HTTP_HOST']) && strstr($_SERVER['HTTP_HOST'], 'dev') ? 'off' : 'on')) . "\n"; ?>
logging_enabled: on
This code assumes that your dev url contains "dev" like http://dev.blogsnippets.com.
$configuration = ProjectConfiguration::getApplicationConfiguration($arguments['application'], $options['env'], true); sfContext::createInstance($configuration);
Donc pour avoir une belle page d'erreur 404, au lieu de la page apache par défaut:
Not Found The requested URL /kikoo was not found on this server.
Dans le fichier définissant le domaine ajouter la clause ErrorDocument:
<Directory "/var/www/phpdebug"> AllowOverride All Allow from All ErrorDocument 404 /www/404.php </Directory>
Suivi du chemin relatif vers la page 404 personnalisée (ici /www/404.php), ce chemin est relatif à partir de la racine physique du domaine. Ensuite il faut donc habiller sa page 404, on peut par exemple ajouter le widget google 404 (voir tools webmaster de google) afin de permettre à l'utilisateur de lancer une recherche avec le terme/page qui a renvoyé une page 404 sur l'ensemble des pages indexées sur google pour le site donné. Comme ici par exemple.
Ne pas oublier de rajouter dans default:
ErrorDocument 404 default
Sinon toutes les pages 404 de tout les sites définis sur le serveur seront redéfinies.
Enjoy. :)
deb http://old-releases.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse deb-src http://old-releases.ubuntu.com/ubuntu/ gutsy main restricted universe multiverse
$(document).ready(function(){
$('#content').css('border-bottom', '0px');
});
logs
8703.5 KB