Problem jest prawdopodobnie jednym z rzędu przetwarzania. Domyślam się, że twój kod PHP jest oceniany po wyrenderowaniu bloku głównego. Podczas gdy twój kod pomyślnie aktualizuje instancję klasy bloków czołowych, dzieje się to po wygenerowaniu danych wyjściowych z tej instancji.
Lepszym rozwiązaniem będzie dodanie wywołań addJs()
w układzie XML, tak aby były przetwarzane przed renderowaniem. Byłoby miło, gdyby był atrybut ifnotconfig
, ale na razie możesz użyć pomocnika.
Utwórz klasę pomocniczą za pomocą metody, która zwraca ścieżkę skryptu w oparciu o ustawienia konfiguracji, a następnie użyj jej jako argumentu powrotu.
<?php
class My_Module_Helper_Class extends Mage_Core_Helper_Abstract
{
public function getJsBasedOnConfig()
{
if (Mage::getStoreConfigFlag('mymodule/settings/enable')) {
return 'path-to-file/file1.js';
}
else {
return 'path-to-file/file2.js';
}
}
}
Następnie w układzie XML:
<?xml version="1.0"?>
<layout>
<default>
<reference name="head">
<action method="addJs">
<file helper="classgroup/class/getJsBasedOnConfig" />
<!-- i.e. Mage::helper('module/helper')->getJsBasedOnConfig() -->
</action>
</reference>
</default>
</layout>
Czy instrukcja warunkowa działa na proste echo/drukowanie? –
Dziękuję Alanowi za odpowiedź. Tak, warunkowe daje 0 lub 1, jeśli wykonam echo. Jednak starałem się wyeliminować całe linie poza jedną linią: $ this-> getLayout() -> getBlock ('head') -> addJs ('path-to-file/file1.js'); Ale nadal nie działa. Ścieżka jest po katalogu głównym js. – user1576748
Z jakiego pliku szablonu bloku wchodzisz? –