IPB

Willkommen, Gast ( Anmelden | Registrierung )

5 Seiten V   1 2 3 > »   
Reply to this topicStart new topic
> Unbenutzte CSS Klassen finden ..., ... oder vielleicht sogar Bilder?
Andreas
Beitrag 18.02.2005 - 11:53
Beitrag #1


____________________
Gruppensymbol

Gruppe: Admin
Beiträge: 1.220
Mitglied seit: 20.10.2001
Mitglieds-Nr.: 3



Hi,

wie das so ist. Man bastelt jahrelang an einer Site und die wächst und wächst und irgendwann weiß man nicht mehr, welche Klasse aus dem Stylesheet man noch benutzt und welche nicht - gleiches gilt für Bilder aus dem "zentralen" Grafiken Ordner ...

Ich benutze TopStyle 3.11 und dort gibt es einen Sitereport, der zumindest für die CSS Klassen das gewünschte erledigt. Das Programm findet unbenutzte Klassen (orphan classes). Die Sache hat nur einen Haken: benutzt man multiple Klassen (class="button rechts klein") erkennt TopStyle das (noch!) nicht :-( Also leider nicht zu gebrauchen.

Kennt jemand ein Tool, welches genau das erledigt? CSS Datei nehmen, gucken wo die innerhalb der Site überall verlinkt ist und die nicht benutzten Klassen anzeigen?

Ähnliches sollte ja auch für Bilder funktionieren: Bildordner auswählen, und Site durchsuchen, welche der im Ordner enthaltenen Bilder/Dateien nicht irgendwo in der Site benutzt wird.

Das würde mich gewaltig nach vorne bringen *g*

Viele Grüße

Andreas
Go to the top of the page
 
+Quote Post
Conny
Beitrag 18.02.2005 - 14:42
Beitrag #2


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hallo Andreas,
mir geht es genau so!
Ich 'sortiere' auch mit TopStyle und da wo ich meine überflüßiges gefunden zu haben, lösche ich es nicht sondern, wird es erst mal auskommentiert.
Wenn mir dann in den nächsten Wochen nichts auffällt, wird es erst endgültig gelöscht.... So muß man sich helfen.

Was die Bilder angeht, so fällt mir gerade ein, geht das etwas mühsam mit XENU.

Und zwar, da wo ich denke, daß es ein Bild ist was nicht mehr verwendet wird, nehme ich es raus in einem Ablageordner, lasse dann Xenu laufen und sollte es doch noch in gebrauch sein, gibt es eine Fehlermeldung. Ohne Fehlermeldung kann das Bild draußen bleiben, mit Fehlermeldung weiß ich erstens, daß das Bild noch Verwendung findet und zweitens wo.

Ich weiß, alles etwas umständlich, aber wie gesagt 'So muß man sich helfen...'

cu
Conny
Go to the top of the page
 
+Quote Post
i.b.g
Beitrag 18.02.2005 - 17:23
Beitrag #3


Weiss zuviel!!
Gruppensymbol

Gruppe: Mods
Beiträge: 668
Mitglied seit: 19.04.2002
Wohnort: Grimmen
Mitglieds-Nr.: 385



Hallo,

es geht sicher auch mit PHP, aber ich bin nur mit Perl vertraut:
QUELLTEXT
#!c:/perl/bin/perl
# finde nicht verwendete bilder

use strict;
use warnings;
use File::Find;

my $home;
my $picture_subdir;
my $picture_dir;
my $picture;
my @picture_files;
my @html_files;
my $html;
my $scan_result;

# hier das stammverzeichnis der homepage eintragen
$home = 'c:/home/ingo/html/interpro_neu';
# hier das unterverzeichnis der bilder eintragen
$picture_subdir = 'bilder';

$picture_dir = $home.'/'.$picture_subdir;

find(\&find_picture, $picture_dir);
@picture_files = sort @picture_files;

find(\&find_html, $home);

foreach $picture (@picture_files) {
     foreach $html (@html_files) {
           $scan_result = &scan($html, $picture);
           if ($scan_result) {
                 last;
           }
     }
     unless ($scan_result) {
           print "\nDas Bild : $picture wird zurzeit nicht verwendet!\n";
     }
}

sub find_picture {
     my $akt_file = $File::Find::name;
     push @picture_files,$akt_file if ($akt_file =~ /[jpg|gif|png]$/i);
     foreach (@picture_files) {
           s/$picture_dir\///;
     }
}

sub find_html {
     my $akt_file = $File::Find::name;
     push @html_files,$akt_file if ($akt_file =~ /\..?htm.?$/i);
}

sub scan {
      my ($html,$picture)=@_;
      my $html_content;
      my $found;
      undef $/;
      open (IN,"< $html");
      $html_content=<IN>;
      close IN;
      $found = $html_content =~ /$picture/;
      return $found;
}


Ich komme damit ziemlich gut klar. Man könnte, wenn man Zeit und Lust hätte, noch ein Formular und eine Ausgabe über CGI dazu tun. Mir reichts so.

Der Beitrag wurde von i.b.g bearbeitet: 18.02.2005 - 17:25
Go to the top of the page
 
+Quote Post
Andreas
Beitrag 18.02.2005 - 19:02
Beitrag #4


____________________
Gruppensymbol

Gruppe: Admin
Beiträge: 1.220
Mitglied seit: 20.10.2001
Mitglieds-Nr.: 3



Hi Ingo,

sowas schwebte mir im Kopf auch schon vor ... nur faul wie ich bin ... wink.gif

Habe das Script mal ausprobiert. Funktioniert leider nicht so ganz wie erhofft. Ich weiß allerdings noch nicht warum ... ich musste die Pfade ein wenig umbiegen und nun findet er alle Bilder als unbenutzt. Meine Bilder liegen ziemlich woanders, als der Ordner, den ich durchsuchen möchte.

d:\www\filmf1\film\kritiken wird durchsucht und d:\www\filmf1\grafic\jpeg ist der abzugleichende Bilderordner. Also benutze ich
QUELLTEXT
$home = 'd:/www/filmf1/film/kritiken';
$picture_dir = 'd:/www/filmf1/grafic/jpeg';
und das Script läuft auch (fast - bei S geht es in den Timeout wink.gif ) durch. Nur halt mit allen Bildern als unbenutzt.

Mit
QUELLTEXT
$home = 'd:/www/filmf1/film/kritiken';
$picture_subdir = '../../grafic/jpeg';
$picture_dir = $home.'/'.$picture_subdir;
übrigens das gleiche Ergebnis.

Und die Bilder erkennt er offensichtlich, denn die findet er alle :-o

Grüße

Andreas - noch bastelnd
Go to the top of the page
 
+Quote Post
hondocrx
Beitrag 18.02.2005 - 21:43
Beitrag #5


is getting harder


Gruppe: User
Beiträge: 26
Mitglied seit: 24.09.2004
Mitglieds-Nr.: 3.770



eventuell könnte das Script bei den Class-Problem helfen.

Ist nicht das sauberste und auch nur auf einem lokalen Server getestet.
Es werden folgende Dateien untersucht.

htm
html
php
php4
incl

Dabei ist es egal ob Groß oder Keinschreibung

In Zeile 2 Muss der Pfad zu der CSS-Datei rein.
Das Verzeichnes mit der Suchdatei ist als oberstes Verzeichniss anzusehen.


Die Datenstruktur der CSS sollte so aussehen:

QUELLTEXT
.Navi2                 {background-color:#CC0000;}
.Navi3                 {background-color:#FED634;}
.Navi4                             {color:#000000; background-color:#FFEA96;}
a.Navi5:link,  a.Navi5:visited  {text-decoration:none; color:#000000;}
a.Navi5:active, a.Navi5:hover {text-decoration:none; color:#006600;}



Ist eine deklaration mit "/* Navi2 {background-color:#CC0000;}" aukommentiert wird diese trotzdem mit in die Suche einbezogen.

Bekannte Fehler

Es werden auch Definitionen wie body,td,a usw angezeicht da diese nicht über class definiert werden müssen.

Eventuell ist das ganze Ding ja auch schrott.

MfG

QUELLTEXT
<?php
$css_Datei="css/style.css";


function dirlist($dir)
{
$list = array();
$dp = opendir($dir);
while($file = readdir($dp))
{
   if(!is_dir($dir."/" . $file)) $list[] = $dir. "/" . $file;
   else
   {
       if($file != ".." && $file != ".")
       {
           $clist = dirlist($dir."/".$file);
           foreach($clist as $file2)
           {
               array_push($list, $file2);
           }
       }
   }
}
return $list;
}

$list = dirlist($DOCUMENT_ROOT . substr($PHP_SELF,0,strrpos($PHP_SELF,"/")));



for ($counter_list=0;$counter_list<count($list);$counter_list++)
   {
   $endung=pathinfo($list[$counter_list]);
   if (strtolower($endung['extension'])=='htm' || strtolower($endung['extension'])=='html' || strtolower($endung['extension'])=='php' || strtolower($endung['extension'])=='php4' || strtolower($endung['extension'])=='incl')
      {
      $dateizeilen = file($list[$counter_list]);
      //echo count($dateizeilen).'<br>';
      for($count_dateizeilen=0;$count_dateizeilen < count($dateizeilen);$count_dateizeilen++)
         {
         if(strpos($dateizeilen[$count_dateizeilen],'class'))
           {
           $dateizeilen[$count_dateizeilen]=str_replace('"','\'',$dateizeilen[$count_dateizeilen]);
           $classEN=explode('class=\'',$dateizeilen[$count_dateizeilen]);
           //echo count($classEN).'<br>';
           for($count_classEN=1;$count_classEN<count($classEN);$count_classEN++)
              {
              $classEN_1=explode('\'',$classEN[$count_classEN]);
              //echo "<textarea name='' cols='60' rows='3'>".$classEN_1[0]."</textarea><br>";
              $class_array[]=$classEN_1[0];
              }
           }
         }
      }

   //echo $list[$counter_list].'<br>';
   }


$class_array_1=array_unique($class_array);



//
//#############################################################################
//

$csszeilen = file($css_Datei);
      for($count_csszeilen=0;$count_csszeilen < count($csszeilen);$count_csszeilen++)
         {
         if(strpos($csszeilen[$count_csszeilen],'{'))
           {
            $csszeilen_1=explode('{',$csszeilen[$count_csszeilen]);
            $csszeilen_1[0]=trim(str_replace('/*','',$csszeilen_1[0]));
            $csszeilen_1[0]=trim(str_replace(':link','',$csszeilen_1[0]));
            $csszeilen_1[0]=trim(str_replace(':hover','',$csszeilen_1[0]));
            $csszeilen_1[0]=trim(str_replace(':visited','',$csszeilen_1[0]));
            $csszeilen_1[0]=trim(str_replace(':active','',$csszeilen_1[0]));

            if(strpos($csszeilen_1[0],','))
              {
              $csskomma=explode(',',$csszeilen_1[0]);
              for($i=0;$i<count($csskomma);$i++)
                  $css_array[]=trim($csskomma[$i]);
                  }
            else $css_array[]=trim($csszeilen_1[0],'.');
            }
         }



//
//#############################################################################
//



//echo count($css_array).'<br>';

$css_array_1=array_unique($css_array);
//echo count($css_array_1).'<br>';

for($i=0;$i < count($css_array_1);$i++)
   {
   if(strpos($css_array_1[$i],'.'))
     {
     $css_array_1[$i]=str_replace('.','',strstr($css_array_1[$i],'.'));
     }

    if($css_array_1[$i]!='')
       {
       $css[] = $css_array_1[$i];
       }
}
$unbenutzt = array_diff($css,$class_array_1);
for($i=0;$i < count($unbenutzt);$i++)
  {
  if($unbenutzt[$i]!='')echo $unbenutzt[$i].'<br>';
  }
?>


Der Beitrag wurde von hondocrx bearbeitet: 18.02.2005 - 22:31
Go to the top of the page
 
+Quote Post
i.b.g
Beitrag 19.02.2005 - 10:56
Beitrag #6


Weiss zuviel!!
Gruppensymbol

Gruppe: Mods
Beiträge: 668
Mitglied seit: 19.04.2002
Wohnort: Grimmen
Mitglieds-Nr.: 385



Hallo,

ZITAT(Andreas @ 18.02.2005 - 19:02)
Habe das Script mal ausprobiert. Funktioniert leider nicht so ganz wie erhofft. Ich weiß allerdings noch nicht warum ...


Nun das ist leicht zu erklären, denn ich hab es erst mal so geschrieben, dass das Grafikverzeichnis ein Unterverzeichnis der Homepage ist.

Ich hab es noch ein wenig angepasst, und nun sollte es eigentlich wie erwartet laufen. Man muss jetzt die beiden Verzeichnisse komplett eingeben, so dass sie unabhängig von einander sind. bei den HTML-dateien werden alle Dateien gefunden, die htm in der Dateiergänzung haben, htm html shtm shtml phtm phtml usw. Dateien mit php werden nicht gefunden. Kann man aber leicht im Filter anpassen.

zurzeit
QUELLTEXT
$akt_file =~ /\..?htm.?$/i

ändern in z.B.
QUELLTEXT
$akt_file =~ /\.(.?htm.?|php)$/i


Versuch einfach mal das hier:
QUELLTEXT
#!c:/perl/bin/perl
# finde nicht verwendete bilder

use strict;
use warnings;
use File::Find;


my $home;
my $picture_subdir;
my $picture_dir;
my $picture;
my @picture_files;
my @html_files;
my $html;
my $scan_result;
my $not_used=0;

# hier das stammverzeichnis der homepage eintragen
$home = 'c:/home/ingo/html/interpro_neu';
# hier das verzeichnis der bilder eintragen
$picture_dir = 'c:/home/ingo/html/interpro_neu/bilder';


find(\&find_picture, $picture_dir);
@picture_files = sort @picture_files;

print $#picture_files." Bilder in $picture_dir gefunden!\nDavon werden nicht verwendet:\n";

find(\&find_html, $home);

foreach $picture (@picture_files) {
     foreach $html (@html_files) {
           $scan_result = &scan($html, $picture);
           if ($scan_result) {
                 last;
           }
     }
     unless ($scan_result) {
           print "$picture_dir/$picture \n";
           $not_used ++
     }
}
print "Insgesamt werden $not_used Bilder nicht verwendet!\n";


sub find_picture {
     my $akt_file = $File::Find::name;
     push @picture_files,$akt_file if ($akt_file =~ /\.(jpg|gif|png)$/i);
     foreach (@picture_files) {
           s/$picture_dir\///;
     }
}

sub find_html {
     my $akt_file = $File::Find::name;
     push @html_files,$akt_file if ($akt_file =~ /\..?htm.?$/i);
}

sub scan {
     my ($html,$picture)=@_;
     my $html_content;
     my $found;
     undef $/;
     open (IN,"< $html");
     $html_content=<IN>;
     close IN;
     $found = $html_content =~ /$picture/;
     return $found;
}


Ich werd da mal sporadisch dran bleiben, mal sehen was noch so geht. Man hat ja sonst nichts zu tun wink.gif .

Der Beitrag wurde von i.b.g bearbeitet: 19.02.2005 - 11:04
Go to the top of the page
 
+Quote Post
Conny
Beitrag 19.02.2005 - 12:43
Beitrag #7


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Öhm, Ingo..... blush.gif

wie und wo wird denn dieses Script eingebunden? huh.gif

cu
Conny
Go to the top of the page
 
+Quote Post
i.b.g
Beitrag 19.02.2005 - 14:39
Beitrag #8


Weiss zuviel!!
Gruppensymbol

Gruppe: Mods
Beiträge: 668
Mitglied seit: 19.04.2002
Wohnort: Grimmen
Mitglieds-Nr.: 385



Hallo,

von Einbinden kann man nicht sprechen.

Einfach in irgend ein Verzeichnis packen, von wo aus Perl es starten kann - auf der Kommandozeile. Wenn man lange genug mit Unix gearbeitet hat (was ich zurzeit leider nicht mehr tue) kommt man von der Kommandozeile nur ganz schwer los.

c:\irgend_ein_pfad> perl find_not_used_picture.pl

wenn du es so genannt hast.

Ein Problem gibt es aber doch noch.

Wir adressieren ja mit Phase relativ, es sei denn, es hat einen triftigen Grund es nicht zu tun. Des Scanner kann damit noch nicht so richtig umgehen, wenn das Grafikverzeichnis nicht unterhalb des Homepageverzeichnisses - oder eben des Verzeichnisses das gescannt werden soll - liegt.
Darüber muss ich noch einmal grübeln, wie man das relative Adressieren berücksichtigen kann.

Ich sag ja, das ist nur ein Anfang und für mich hier passt es eben.
Go to the top of the page
 
+Quote Post
i.b.g
Beitrag 19.02.2005 - 15:55
Beitrag #9


Weiss zuviel!!
Gruppensymbol

Gruppe: Mods
Beiträge: 668
Mitglied seit: 19.04.2002
Wohnort: Grimmen
Mitglieds-Nr.: 385



Hallo,

nun hat mich doch ein wenig der Ehrgeiz gepackt.

Habe nun noch etwas verändert und denke, dass es so eigentlich funktionieren könnte. Also, Andreas, probier's mal mit dieser Version.

Bei mir scheint es jedenfalls erfolgreich zu sein. Ich kann es ja dann mal kommentieren, wenn es denn sinn machen sollte.

QUELLTEXT
#!c:/perl/bin/perl
# finde nicht verwendete bilder

use strict;
use warnings;
use File::Find;

my $home;
my $picture_subdir;
my $picture_dir;
my $picture;
my @picture_files;
my @html_files;
my $html;
my $scan_result;
my $not_used=0;

# hier das verzeichnis eintragen, wo die html-dateien sind
$home = 'c:/home/ingo/html/interpro_neu/schulen';
# hier das verzeichnis der bilder eintragen
$picture_dir = 'c:/home/ingo/html/interpro_neu/bilder';

find(\&find_picture, $picture_dir);
@picture_files = sort @picture_files;

print 1+$#picture_files." Bilder in $picture_dir gefunden!\nDavon werden nicht verwendet:\n";

find(\&find_html, $home);

foreach $picture (@picture_files) {
     foreach $html (@html_files) {
           $scan_result = &scan($html, $picture);
           if ($scan_result) {
                 last;
           }
     }
     unless ($scan_result) {
           print "$picture \n";
           $not_used ++;
     }
}
print "Insgesamt werden $not_used Bilder nicht verwendet!\n";

sub find_picture {
     my $akt_file = $File::Find::name;
     push @picture_files,$akt_file if ($akt_file =~ /\.(jpg|gif|png)$/i);
}

sub find_html {
     my $akt_file = $File::Find::name;
     push @html_files,$akt_file if ($akt_file =~ /\..?htm.?$/i);
}

sub del_common {
     my ($html, $picture_dir) = @_;
     my @html_dir;
     @html_dir = split('/', $html);
     foreach (@html_dir) {
           $picture_dir =~ s/$_\///i;
     }
     return $picture_dir;
}

sub scan {
     my ($html,$picture)=@_;
     my $html_content;
     my $found;
     undef $/;
     $picture = del_common($html, $picture);
     open (IN,"< $html");
     $html_content=<IN>;
     close IN;
     $found = $html_content =~ /$picture/;
     return $found;
}


ACHTUNG! ACHTUNG!
CSS-Dateien nicht vergessen! Auch dort können Bilder verlinkt sein, die in den HTML-Dateien nicht mehr erscheinen.

Der Beitrag wurde von i.b.g bearbeitet: 19.02.2005 - 16:10
Go to the top of the page
 
+Quote Post
Conny
Beitrag 19.02.2005 - 16:52
Beitrag #10


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hi,
ich habe die Datei mal auf'm Server im Ordner cgi-bin gelegt, um sie dann über ein php-include aufzurufen.... (der Server *kann* Perl!)

Das Ergebnis ist >>HIER<<.
(Aber nicht lachen!)

Anscheinend habe ich es (noch) nicht verstanden huh.gif

cu
Conny
Go to the top of the page
 
+Quote Post
Google Bot
Beitrag
Beitrag #


Google Ads









Go to the top of the page
 
Quote Post

5 Seiten V   1 2 3 > » 
Reply to this topicStart new topic
1 Besucher lesen dieses Thema (Gäste: 1 | Anonyme Besucher: 0)
0 Mitglieder:

 



RSS Vereinfachte Darstellung Aktuelles Datum: 01.11.2024 - 0:00

taschenkalender
expertise-panel IPS Driver Error

IPS Driver Error

There appears to be an error with the database.
You can try to refresh the page by clicking here