Nuestra función comprueba:

  • El componente está instalado y habilitado en la tabla #__extensions .
  • El component tiene un directorio en el backend.
  • El component tiene un directorio en el frontend.

Se pueden extender los métodos de validación simplemente agregando caracteres a el parámetro validationType. Luego simplemente recibiríamos el estatus de nuestro parámetro y añadiríamos al final de script nuestra validación.

	/**
	 *
	 * @author Roberto Segura - Digital Disseny, S.L.
	 * @version 02/07/2012
	 *
	 * @param string $comString
	 * @param string $validationType:
* 100 => 1st char = validate db?
* 010 => 2nd char = validate backend folder?
* 001 => 3rd char = validate frontend folder?
* 111 => validate all example
*/ public function validateComponent($comString, $validationType = 100){ jimport('joomla.filesystem.folder'); // default result $validComponent = false; $validationsDone = 0; // use allways as string $validationType = (string)$validationType; // get required validations $validateDb = (isset($validationType[0]) && $validationType[0] == '1'); $validateBackend = (isset($validationType[1]) && $validationType[1] == '1'); $validateFrontend = (isset($validationType[2]) && $validationType[2] == '1'); // validate: extension is present and enabled on db if (($validationsDone == 0 || ($validComponent)) && $validateDb) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('extension_id, name'); $query->from('#__extensions'); $query->where('name='.$db->quote($comString)); $db->setQuery($query); if($db->loadObject()) { $validComponent = true; } else { $validComponent = false; } $validationsDone++; } // validate: backend folder exist if (($validationsDone == 0 || ($validComponent)) && $validateBackend) { $backendPath = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .'components' . DIRECTORY_SEPARATOR . $comString ; if (JFolder::exists($backendPath)) { $validComponent = true; } else { $validComponent = false; } $validationsDone++; } // validate: frontend folder exist if (($validationsDone == 0 || ($validComponent)) && $validateFrontend) { $frontendPath = JPATH_SITE . DIRECTORY_SEPARATOR .'components' . DIRECTORY_SEPARATOR . $comString; if (JFolder::exists($frontendPath)) { $validComponent = true; } else { $validComponent = false; } $validationsDone++; } return $validComponent; }

La función se llamará así:

$validComponent = validateComponent('com_phocagallery',101);

Como el tipo de validación que le hemos pasado es '101' la función hará la primera comprobación (base de datos) y la tercera (directorio en el frontend).

Para demostrar lo sencillo que es personalizar / adaptarlo crearemos una validación extra. En este caso simplemente comprobaremos que el componente se sea phocagallery. En este caso la llamada sería:

$validComponent = validateComponent('com_phocagallery',1001);

Como ves sólo hemos agregado un carácter más a validationType. La función quedaría:

	/**
	 *
	 * @author Roberto Segura - Digital Disseny, S.L.
	 * @version 02/07/2012
	 *
	 * @param string $comString
	 * @param string $validationType:
* 100 => 1st char = validate db?
* 010 => 2nd char = validate backend folder?
* 001 => 3rd char = validate frontend folder?
* 111 => validate all example
*/ public function validateComponent($comString, $validationType = 1000){ jimport('joomla.filesystem.folder'); // default result $validComponent = false; $validationsDone = 0; // use allways as string $validationType = (string)$validationType; // get required validations $validateDb = (isset($validationType[0]) && $validationType[0] == '1'); $validateBackend = (isset($validationType[1]) && $validationType[1] == '1'); $validateFrontend = (isset($validationType[2]) && $validationType[2] == '1'); // check if my validation is required $myValidation = (isset($validationType[3]) && $validationType[3] == '1'); // validate: extension is present and enabled on db if (($validationsDone == 0 || ($validComponent)) && $validateDb) { $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('extension_id, name'); $query->from('#__extensions'); $query->where('name='.$db->quote($comString)); $db->setQuery($query); if($db->loadObject()) { $validComponent = true; } else { $validComponent = false; } $validationsDone++; } // validate: backend folder exist if (($validationsDone == 0 || ($validComponent)) && $validateBackend) { $backendPath = JPATH_ADMINISTRATOR . DIRECTORY_SEPARATOR .'components' . DIRECTORY_SEPARATOR . $comString ; if (JFolder::exists($backendPath)) { $validComponent = true; } else { $validComponent = false; } $validationsDone++; } // validate: frontend folder exist if (($validationsDone == 0 || ($validComponent)) && $validateFrontend) { $frontendPath = JPATH_SITE . DIRECTORY_SEPARATOR .'components' . DIRECTORY_SEPARATOR . $comString; if (JFolder::exists($frontendPath)) { $validComponent = true; } else { $validComponent = false; } $validationsDone++; } // validate: do myValidation if (($validationsDone == 0 || ($validComponent)) && $myValidation) { if ($comString == 'com_phocagallery') { $validComponent = true; } else { $validComponent = false; } $validationsDone++; } return $validComponent; }