Créer un compte ou loggez-vous pour pouvoir ajouter, commenter et noter les snippets.

Navigation

Tags

ajax apache doctrine java javascript jquery mysql pear php propel prototype svn symfony ubuntu windows xml

Derniers commentaires/last comments latest comments

my Symfony Plugins

Plugins demos


My bookmarks

Vous pouvez commenter/noter en utilisant le compte anonymous (mot de passe: anonymous)
You can comment/rate using the anonymous account (password: anonymous).

Les plus commentés Les plus commentés

[symfony] Joomla to symfony mini-bridge [EN] (deprecated) - 1726 view(s)

This snippet is deprecated, please use the sfJoomla15BridgePlugin plugin witch works with the new 1.5 Joomla and the symfony 1.2 version.


This tutorial is for the 0.7.0 version please check the Symfony Wiki for 0.8.0 doc until i can update this tutorial.

Intro

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)

1 - Installation

Versions used :

  • Symfony 1.0.0 stable
  • Joomla 1.0.12 stable

  • Install the plugin (check the plugin Wiki page in Symfony )

  • or Download here
    • Copy it in the plugins folder (i'll make a full symfony package later)
    • Copy the plugin web directory in the /web directory of your project

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.

2 - Configuration

Joomla component

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.
}

Symfony

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

3 - Use

Creation of Symfony page

We are going to do a page (module/action) whitch will be called by Joomla with the help of its new component.


sf actions creation

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());
    }


sf view creation

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&param2=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


Call and test it in Joomla

We can now call our sf pages in Joomla, link are formed as following : index.php?option=index&task=users

  • option : identify the sf module name
  • task : identify the sf module action
  • After that you can add all the paremeters you want, they will be available to Symfony.

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 /!\

4 - Demo

Has to be updated for symfony 1.1

5 - Conclusion

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 :)

par COil le 2008-10-19, taggé : bridge  joomla  plugin  symfony 
(4 commentaires)

[symfony 1.1 / 1.2] : Validation OR sur 2 champs différents - 864 view(s)

    // Check category or query
    $v = new sfValidatorCallback(array(
      'callback' => array($this, 'checkCategoryOrQuery')
    ,) ,
    array(
      'invalid'  => 'Veuillez choisir une rubrique ou un mot clé'
    ));
 
    $this->validatorSchema->setPostValidator($v);

et le callback qui va bien:

  /**
   * Check if a category or a keyword has been set.
   *
   * @param sfValidator $validator
   * @param Array $value Form values
   * @param Array $arguments  Validation arguments
   * 
   * @return mixed
   */
  public function checkCategoryOrQuery($validator, $value, $arguments)
  {
    if (empty($value['category_id']) && empty($value['nature_id']))
    {
      throw new sfValidatorError($validator, 'invalid');
    }
 
    return $value;
  }
par COil le 2008-09-29, taggé : callback  form  symfony  validation  validator 
(3 commentaires)

[symfony] Fichier typique .htaccess pour OVH - 572 view(s)

[EN] This is a typical .htaccess file for the french hoster OVH (1)

[FR] Voici un fichier .htaccess typique pour faire fonctionner une application Symfony sur un hébergement mutualisé OVH comme le 240gp.

(1)

SetEnv PHP_VER 5
SetEnv REGISTER_GLOBALS 0
SetEnv MAGIC_QUOTES 0
mod_gzip_on Off
 
Options +FollowSymLinks +ExecCGI
 
<IfModule mod_rewrite.c>
  RewriteEngine On
 
  # we skip all files with .something
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteCond %{REQUEST_URI} !\.php
  #RewriteCond %{REQUEST_URI} !\.php
  RewriteRule .* - [L]
 
  # we check if the .html version is here (caching)
  RewriteRule ^$ /index.html [QSA]
  RewriteRule ^([^.]+)$ /$1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f
 
  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ /index.php [QSA,L]
 
  # hidden frontoffice controller
  RewriteRule ^index\.php/(.*)$ /index.php [QSA,L]
 
  # fo controllers
  RewriteRule ^frontend\.php/(.*)$ /frontend.php [QSA,L]
  RewriteRule ^frontend_dev\.php/(.*)$ /frontend_dev.php [QSA,L]
 
</IfModule>
 
# big crash from our front web controller
ErrorDocument 500 "<h2>Application error</h2>symfony application failed to start properly"
 
par COil le 2008-09-28, taggé : apache  config  hosting  ovh  symfony 
(3 commentaires)

[symfony 1.0] Appeler une remote function après modification d'une combobox - 519 view(s)

'onchange' =>
                 remote_function(array(
                   'update' => 'item_domain',
                   'url' => 'list/subdomain',
                   'with' => "'id=' + this.options[this.selectedIndex].value"
                 ))
par COil le 2008-09-29, taggé : ajax  prototype  symfony 
(3 commentaires)

[WAMP 2.0] Activer les sous-domaines sur le localhost - 1444 view(s)

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)

par COil le 2008-11-12, taggé : apache  vhost  wamp  windows 
(2 commentaires)

[Ubuntu] Dépôts APT pour des anciennes versions - 921 view(s)

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
par COil le 2009-06-10, taggé : install  maintenance  ubuntu 
(2 commentaires)

[symfony 1.0] Keep page number after update in an admin generator list - 446 view(s)

Here is a small patch for the action.class of the admin generator theme :

in executeList() function replace :

$this->pager->setPage($this->getRequestParameter('page', 1));
 

by :

$this->pager->setPage($this->getRequestParameter('page', $this->getUser()->getAttribute('page', 1, 'sf_admin/<?php echo $this->getSingularName() ?>')));
 

in executeList() function add at the end :

// Save page
    if ($this->getRequestParameter('page')) {
        $this->getUser()->setAttribute('page', $this->getRequestParameter('page'), 'sf_admin/<?php echo $this->getSingularName() ?>');
    }
 

in the process() function, before the 1st removeNamespace statement add :

$this->getUser()->getAttributeHolder()->removeNamespace('sf_admin/<?php echo $this->getSingularName() ?>');
 

Original forum post

par COil le 2008-09-28, taggé : admingenerator  list  pager  symfony 
(2 commentaires)

[jQuery] Contrôle de champs radio-box et checkbox - 7104 view(s)

1er cas:

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();
  }
}

2ème cas:

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();
  }
}
par COil le 2009-01-09, taggé : form  javascript  jquery  radio  test 
(1 commentaire)

[Symfony 1.2] Autoriser l'envoi de champs additionnels à un formulaire - 1674 view(s)

public function allowExtraFields()
{
  $this->validatorSchema->setOption('allow_extra_fields', true);
}
par COil le 2009-08-13, taggé : form  symfony 
(1 commentaire)

[Ubuntu] Compression basique avec zip - 1466 view(s)

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
par COil le 2008-11-29, taggé : compression  ubuntu  zip 
(1 commentaire)
Debug toolbar