Najlepsza metoda sprawdzenia, czy składnik jest zainstalowany / włączony?


12

Jaki jest najlepszy sposób sprawdzenia, czy inny komponent jest zainstalowany i / lub włączony między joomla 2.5 a 3.x? Istnieje klasa pomocnicza o nazwie, JComponentHelperale uważam, że isEnabledfunkcja faktycznie zgłosi błąd, jeśli sprawdzany komponent nie zostanie zainstalowany w niektórych wersjach Joomla.

Może to być tak proste, jak bezpośrednie połączenie z bazą danych, ale chciałem sprawdzić, czy istnieją inne klasy / pomocniki / metody.

Odpowiedzi:


12

Używam w ten sposób:

// Check for component
if (!JComponentHelper::getComponent('<component name>', true)->enabled)
{
.....
}

<component name> - bez prefiksu „com_”


4

Spróbuj tego,

Sprawdź bazę danych, aby sprawdzić, czy składnik jest zainstalowany i włączony.

$db = JFactory::getDbo();
$db->setQuery("SELECT enabled FROM #__extensions WHERE name = 'com_name'");
$is_enabled = $db->loadResult();

jeśli wartość $ is_enabled wynosi 1, wówczas twój komponent jest włączony. Inaczej,

if (!JComponentHelper::isEnabled('com_mycomp', true))
{
    JError::raiseError('404', JText('Component not installed / enabled'));
}

3

Masz rację, że niektóre wersje wyświetlają błąd, jeśli składnik nie istnieje. O ile wiem, JComponentHelper::getComponent('com_name', true)->enablednajlepiej sprawdzić, czy składnik jest włączony.

W Joomla 3.0 i nowszych możesz tego użyć, nawet jeśli komponent nie jest zainstalowany.

W Joomla 2.5 nawet najnowsza wersja (2.5.19) wyśle JError::raiseWarningkomunikat, który zostanie wyświetlony użytkownikowi końcowemu, jeśli komponent nie zostanie zainstalowany. Jeśli chcesz obsługiwać J2.5, wydaje się, że będziesz musiał użyć własnego pomocnika do załadowania komponentu. (Prawdopodobnie mógłbyś stworzyć nowego pomocnika, który rozszerza JComponentHelper i po prostu zastępuje _loadfunkcję, aby uzyskać te same funkcje z niewielką zmianą.)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.