na wstępie chciałbym przywitać całą polską społeczność Yii, jestem nowym użytkownikiem i mam nadzieje, że będę mógł dołożyć do projektu pare swoich cegiełek.
[size="1"]----GORZKIE ŻALE----
Jedyny FW na jakim pracowałem i miałem styczność to CodeIgniter. Mimo tego zrozumienie Yii, zwłaszcza w mojej sytuacji sprawia mi pewne trudności. Zostałem wrzucony do projektu, który został ukończony w ok. 60%. Muszę sprawić aby wszystko działało, a z Yii żadnego kontaktu wcześniej nie miałem. Aby nie wyszło, że są to same gorzkie żale, przyznam że dzięki temu mam przyjemność zapoznać się z frameworkiem i wcale z tego powodu nie płacze Potrzebuję tylko małego wsparcia.
---------------------[/size]
—PROBLEM—
Zaczynając od prostych rzeczy, chciałbym zedytować pare plików css, ponieważ tego wymaga moje pierwsze zadanie. Pliki css znajdują się w folderze yiiroot/css. Przy tworzeniu nowego pliku i dołączaniu go do sekcji nagłówkowej zmiany są widoczne, jednak przy edycji już istniejących arkuszy na serwerze - żadne modyfikacje nie przynoszą skutku. Istnieją jako kod w plikach, ale nie widać żadnych rezultatów w przeglądarce. Zakładam(chyba słusznie), że sprawę psują assety. Na początku myślałem, że proste usunięcie zawartości tego folderu powinno załatwić sprawę. Niestety rozczarowałem się i nadal stoję w miejscu.
Czy ktoś uprzejmy mógłby mi wskazać gdzie jest błąd w moim rozumowaniu, ewentualnie wytłumaczyć zasadę działania Yii w takich przypadkach? W pliku css dana klasa jest zawarta, tak samo w strukturze, jednak style nie są aprobowane przez przeglądarke. Dodam, że żadnych literówek, błędnych deklaracji itp. nie ma. Przejrzałem materiał dostępny w internecie, jednak nadal nie mogą popradzić sobię z tym problemem.
w /protected/config dodaj sobie opcje debug true. Mozesz tez usunac zawartosc katalogu assets w katalogu projektu (poznasz po katalogach co maja w nazwach krzaki)
dziękuję za ekspresową odpowiedź. Nie bardzo wiem gdzie w /protected/confing mam ustawić opcję debugowania? Na pewno mam ustawioną w yiiroot/index.php wartość
defined('YII_DEBUG') or define('YII_DEBUG',true);
Jeśli chodzi o usuwanie zawartości katalogu assets, to również tego próbowałem, niestety bez rezultatów.
'params'=>array(
// this is used in contact page
'adminEmail'=>'webmaster@example.com',
'defaultPageSize' => 20,
'debug' => true,
'webRoot' => dirname(__FILE__).DIRECTORY_SEPARATOR.'../../'
)
Może jakis inny moduł obsługuje te assety skoro usunięcie tego katalogu nic nie daje, może jest jakiś moduł do kompresji tego jeszcze
Patrzyłeś w źródle strony czy przeglądarka "widzi" te zaktualizowane pliki? Z jakiego adresu są pobierane pliki css? Czy właśnie z tej ścieżki, pod którą edytujesz plik? Może pliki css ładowane są z folderu themes/…? Firebug do FF albo Google chrome (skrót F12) i sprawdź skąd ładują się pliki css.
dziękuję wszystkim za porady. Muszę przyznać, że sprawdziłem poprawność trybu debugowania oraz prawidłowość ścieżek. Wszystko wydawało się zgodne z waszymi poradani. Postanowiłem ostatni raz wyczyścić /assets i o dziwo zadziałało. Rzecz, którą powtarzałem kilkanaście razy i nie przynosiła rezultatu. Do teraz nie mogę ustalić gdzie leżał problem, najważniejsze, że wszystko jest już sprawne. Jeśli uda mi się znaleźć przyczynę usterki, podziele się opisem na forum.
Pozdrawiam i jeszcze raz dziękuję za odpowiedzi, Mhuh
generalnie czyszczenie assetow powinno pomoc, ale moze problem lezal troche gdzie indziej - na produkcji moze miales ustawione opcje keszowania statycznych plikow (naglowek http Expires) i pliki keszowaly sie w przegladarce lub jakims proxy/loadbalancerze gdzies po drodze? jesli tak - dopiero kiedy wygasl czas ‘Expires’ proxy/przegladarka ponownie odpytalo serwer o aktalizacje pliku i wszystko zaskoczylo.
Przyłączając się do wątku, co można zrobić, gdy trzeba edytować intensywnie CSS? Czyszczenie assets przed każdym wyświetleniem aplikacji jest nieco kłopotliwe (chyba, że jakieś makro w IDE). Ja wpadłem na pomysł edycji CSS w assets, tylko potem trzeba pamiętać o przeniesieniu pliku we właściwe miejsce. Jest jakiś lepszy sposób?
Odświeżę trochę temat. Ja rozwiązałem to trochę inaczej. Usuwam cyklicznie co 1h assety, w przypadku częstych aktualizacji odpalam crona. Rozwiązanie problemu:
Do tego celu potrzebujemy rozszerzenia PHPDocCrontab oraz wpis w CronTabie odpalania co minute "php yiic cron run"
Worker
function delete_directory($dirname)
{
if (is_dir($dirname))
{
$dir_handle = opendir($dirname);
}
if (!$dir_handle)
{
return false;
}
while($file = readdir($dir_handle))
{
if ($file != "." && $file != "..")
{
if (!is_dir($dirname."/".$file))
{
unlink($dirname."/".$file);
}
else
{
delete_directory($dirname.'/'.$file);
}
}
}
closedir($dir_handle);
rmdir($dirname);
}
class WorkerCommand extends CConsoleCommand
{
/**
* @cron *\59 * * * *
*/
public function actionIndex()
{
if(is_dir('./../assets/')==true)
{
$active_directory = './../assets/';
$handle=opendir($active_directory);
$zmienna=0;
while(FALSE !==($file=readdir($handle)))
{
$path = $active_directory . $file;
if ($file != "." && $file != ".." && is_dir($path) == TRUE)
{
$zmienna++;
}
}
echo $zmienna;
if ($handle = opendir($active_directory))
{
while (false !== ($entry = readdir($handle)))
{
if ($entry != "." && $entry != "..")
{
echo "$entry\n";
delete_directory('./../assets/'.$entry);
}
}
closedir($handle);
}
if($zmienna != 0)
{
$wpis = new CronLog;
$wpis->text = "Usunalem ". $zmienna." folderów" ;
$wpis->save();
} else {
$wpis = new CronLog;
$wpis->text = "Brak folderów do usuniecia" ;
$wpis->save();
}
} else {
echo 'brak katalogu';
$wpis = new CronLog;
$wpis->text = "Brak katalogu głównego assets do usuniecia" ;
$wpis->save();
}
}
}