Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum osCommerce-fr _ MS3 _ [résolu]Custom Dashboard

Écrit par : foayiid 18 Apr 2012, 21:59

Salut,

Je reprends le sujet entammé il y a quelques semaines sur le forum international.
Non je ne travaille pas sur un module payant au passage.
Donc quand on met un fichier test dans le module dashboard de l'admin du Core c'est OK.
Par contre quand on met le meme fichier dans le custom, là rien ne sort.

J'ai parcouru le code dans tous les sens et je ne comprends pas d'ou vient le bug.
J'ai du louper quelquechose ...

Voici le fichier de test (Test.php)

Code
<?php
   namespace osCommerce\OM\Core\Site\Admin\Module\Dashboard;

   use osCommerce\OM\Core\Registry;
   use osCommerce\OM\Core\HTML;
   use osCommerce\OM\Core\OSCOM;
   use osCommerce\OM\Core\Access;

   class Test extends \osCommerce\OM\Core\Site\Admin\IndexModulesAbstract {
     public function __construct() {
       //Registry::get('Language')->loadIniFile('modules/Dashboard/Reviews.php');

       $this->_title = 'Test';
       $this->_title_link = OSCOM::getLink(null, 'Reviews');
       $this->_data = 'This is a test';
     }
   }

Écrit par : lorem_ipsum 19 Apr 2012, 16:52

hmmm ici ça marche ^^
Regardes du coté du nom de tes repertoires... Module sans "s" et avec un M maj wink.gif

Écrit par : foayiid 19 Apr 2012, 17:20

Sans rires, ça fonctionne chez toi ?
Zut alors il me fait des blagues ce logiciel ... blink.gif
Pas de probleme de path car quand je mets dans le custom un fichier existant du core (du genre Customers.php) mon fichier pris en compte est bien celui du custom.
Par contre mon fichier Test.php à côté lui, que dale !

Est-ce que tu as bien supprimé ton fichier /osCommerce/OM/Core/Site/Admin/Module/Dashboard/Test.php ??

Écrit par : FoxP2 20 Apr 2012, 08:33

les modules sont appelés par \osCommerce\OM\Core\Site\Admin\Application\Dashboard\Model\getModules.php :

Code
$module_class = 'osCommerce\\OM\\Core\\Site\\Admin\\Module\\Dashboard\\' . $module;


c'est donc ce fichier que tu dois overrider dans le dossier Custom pour en changer le comportement.

Écrit par : lorem_ipsum 20 Apr 2012, 09:41

Effectivement je n'avais pas supprimé celui du Core... comme le dit foxP2 tu dois overwritter le getModule.php.

Écrit par : foayiid 20 Apr 2012, 16:05

Bien vu !
Mais n'est-ce pas un soucis ? le framework ne devrait-il pas le faire automatiquement à votre avis ?

Écrit par : lorem_ipsum 20 Apr 2012, 18:16

Je me suis posé la mm question, mais bon ça ne me choque pas.
Perso je regarde le bébé sous la forme de plusieurs "applications". Dans ton cas tu veux écraser/modifier l'application dashboard, donc tu dois prendre controller...model...(en particulier celui qui lui dit où loader) pour inclure ton modules test.
Bon c'est un peu brouillon mais si t'as les mains dedans et suite au manque de doc.... je pense qu'on se comprend... biggrin.gif


Écrit par : FoxP2 13 Aug 2012, 13:49

Citation (foayiid @ 20 Apr 2012, 16:05) *
Bien vu !
Mais n'est-ce pas un soucis ? le framework ne devrait-il pas le faire automatiquement à votre avis ?

oui.
un oubli ?

qui peut être corrigé facilement :

modification du fichier \osCommerce\OM\Core\Site\Admin\Application\Dashboard\Model\getModules.php :

Code
<?php
/**
* osCommerce Online Merchant
*
* @copyright Copyright (c) 2011 osCommerce; http://www.oscommerce.com
*  @copyright Copyright (c) 2012 FoxP2
* @license BSD License; http://www.oscommerce.com/bsdlicense.txt
*/

  namespace osCommerce\OM\Core\Site\Admin\Application\Dashboard\Model;

  use osCommerce\OM\Core\DirectoryListing;
  use osCommerce\OM\Core\OSCOM;

  class getModules {      
      
    public static function execute() {
    
      $result = array();
      $modules = array();
      
      $OSCOM_DirectoryListing = new DirectoryListing(OSCOM::BASE_DIRECTORY . 'Custom/Site/Admin/Module/Dashboard');
      $OSCOM_DirectoryListing->setIncludeDirectories(false);      

      foreach ( $OSCOM_DirectoryListing->getFiles() as $file ) {
        $module = substr($file['name'], 0, strrpos($file['name'], '.'));      
        $modules[] = $module;
      }
      
      $OSCOM_DirectoryListing = new DirectoryListing(OSCOM::BASE_DIRECTORY . 'Core/Site/Admin/Module/Dashboard');
      $OSCOM_DirectoryListing->setIncludeDirectories(false);
      
      foreach ( $OSCOM_DirectoryListing->getFiles() as $file ) {
        $module = substr($file['name'], 0, strrpos($file['name'], '.'));        
          if( !in_array($module,$modules) ) {
          $modules[] = $module;
          }
      }
      foreach ( $modules as $mod ) {
           $module_class = 'osCommerce\\OM\\Core\\Site\\Admin\\Module\\Dashboard\\' . $mod;
          
           $OSCOM_Admin_DB_Module = new $module_class();
          
           if ( $OSCOM_Admin_DB_Module->hasData()) {
                $result[] = array('module' => $module,
                                  'title' => $OSCOM_Admin_DB_Module->getTitle(),
                                  'link' => $OSCOM_Admin_DB_Module->hasTitleLink() ? $OSCOM_Admin_DB_Module->getTitleLink() : null,
                                  'data' => $OSCOM_Admin_DB_Module->getData());
            }
          }    
      return $result;
    }
  }
?>


donc pour overrider un module déjà existant, exemple avec Customers.php :
créer dans le répertoire Custom les dossiers suivants (en respectant la hiérarchie) :
- Site
-- Admin
--- Module
----Dashboard
copier/coller le fichier \osCommerce\OM\Core\Site\Admin\Module\Dashboard\Customers.php dans le dossier Dashboard.

Code
<?php
/**
  * osCommerce Online Merchant
  *
  * @copyright Copyright (c) 2011 osCommerce; http://www.oscommerce.com
  * @license BSD License; http://www.oscommerce.com/bsdlicense.txt
  */

   namespace osCommerce\OM\Core\Site\Admin\Module\Dashboard;

   use osCommerce\OM\Core\Access;
   use osCommerce\OM\Core\HTML;
   use osCommerce\OM\Core\OSCOM;
   use osCommerce\OM\Core\Registry;

/**
  * @since v3.0.4
  */

   class Customers extends \osCommerce\OM\Core\Site\Admin\IndexModulesAbstract {

.../...


ajouter un nouveau module ? Même principe.
Code
<?php
/**
  * osCommerce Online Merchant
  *
  * @copyright Copyright (c) 2011 osCommerce; http://www.oscommerce.com
  * @license BSD License; http://www.oscommerce.com/bsdlicense.txt
  */

   namespace osCommerce\OM\Core\Site\Admin\Module\Dashboard;

   use class core ...;

/**
  * @since v3.0.4
  */

   class MaClasse extends \osCommerce\OM\Core\Site\Admin\IndexModulesAbstract {

.../...


je passe le sujet en résolu. happy.gif

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)