Hur noga är ni med valideringen, går det öht att få till en helt och hållet w3c-validerad sajt med Drupal? Jag gick igenom en bunt av de listade webbplatserna (inte alla), men hittade inte någon som var helt "ren". En del fel verkar kunna härledas till template-filerna, och borde alltså vara enkla att rätta till (eller borde kanske aldrig uppstått), medan andra uppenbarligen kommer från Drupal självt. T ex har både sökformulärets och inloggningsformulärets submitknappar samma id (det verkar vara ett genomgående fel på alla Drupal-sajter som visar både inloggning och sök). Ett annat vanligt fel är saknade alt-attribut i img-taggar, och det går väl inte att på rak arm säga varifrån det härrör.
Själv har jag fått ett omöjligt(?) fel: w3c påstår att sidan saknar doctype och därför inte kan valideras alls... Vid kontroll av källkoden har jag precis samma första rad som groups.drupal.org/sweden, så jag förstår ingenting just nu. (När jag tittade på källkoden här upptäckte jag f ö följande kommentar: Note: does not validate. We would like it to, but that would mean reduced user experience for the majority of our visitors. Ja, det är ju också en lösning, fast den känns inte helt rätt ändå.
Har ni några trix för att få en Drupal-sida att validera åtminstone så långt som möjligt?
Comments
Jag är väldigt noga med
Jag är väldigt noga med det. Det finns inga särskilda begränsningar i Drupal som hindrar att sidorna validerar. Problemet med submit-knapparna som du nämner kan man lösa genom att klistra in följande i
template.php:/**
* Quick fix for the validation error: 'ID "edit-submit" already defined' or edit-name
* There is a solution in d6 core: http://drupal.org/node/111719
*/
function phptemplate_submit($element) {
static $count_double_id=0;
$tmp = str_replace('edit-submit', 'edit-submit-'. $count_double_id++, theme('button', $element));
return str_replace('edit-name', 'edit-name-'. $count_double_id++, $tmp);
}
(tack till gagarine)
I övrigt brukar det bara vara att beta av validatorns klagomål i tur och ordning. Jag vet inte varför de inte har fixat så att Drupal Groups validerar, felen som W3C-validatorn rapporterar verkar väldigt banala.
Jag är också noga med att
Jag är också noga med att validera. Ett problem med Drupal är att systemet inte tar någon hänsyn till XHTML Static's (som är standard) krav på unika id:n. Ett annat problem är modul-utvecklares oförmåga att använda korrekta metoder istället för kringgå Drupal med egna implementationer, vilket kan leda till (och gör i för många fall) problem.
Den lösning som henrrrik presenterade ovan ser mycket elegant ut. Jag hittar dock inte den metoden i API-dokumentationen?
Tobias Sjösten
Jag brukar också vara noga
Jag brukar också vara noga med valideringen, så därför kändes det här lite irriterande. Tack för tipset för submitknapparna! Då har jag bara ett fel kvar på min sida. Jag löste doctype-problemet, som inte alls hade med deklarationen att göra, jag hade ett "ä" inbakat i en kommentar, när jag fixat det kunde sidan gås igenom. Det som finns kvar efter att jag även lagt in ovanstående fix är koden för IE-fix:
<![if gte IE 7]>...och ska jag inte helt ändra på designen alt byta ut png-bilder mot väldigt mycket fulare giffar får jag väl leva med det :)
Men jag skulle verkligen vilja slå ett slag för att alla försöker få sina Drupal-sidor att validera. Det är faktiskt lite dålig reklam med så många som inte gör det.
/Lena
/Lena
Din IE-fix bör se ut så
Din IE-fix bör se ut så här:
<!--[if gte IE 7]>...
<![endif]-->
På så vis ligger den i en kommentar och ignoreras av validatorn och övriga webbläsare.
Grejen är att innehållet
Grejen är att innehållet ska skrivas ut om det antingen är IE7 eller mer, eller om det inte är IE alls. Innan ligger nämligen
<!--[if lt IE 7]>...
<![endif]-->
och jag behöver alltså en else-konstruktion. Det går ju an om det gäller att länka till en extra css-fil i head, då behöver man inget else, men det här skriver ut olika divar beroende på webbläsare. Jag provade fram och tillbaka med olika kombinationer men det här var det enda som fungerade. Å andra sidan gjorde jag detta en sen natt under stress, när jag plötsligt insåg att jag glömt att kolla hur sidan uppförde sig i IE6... Kanske missade jag något då, och finns det en bättre konstruktion så är jag tacksam för förslag!
/Lena
/Lena
Om du vill förändra
Om du vill förändra innehållet beroende på webbläsaren så skulle jag använda mig av JavaScript istället för conditional comments.
Nu kanske vi går lite off
Nu kanske vi går lite off topic men eftersom LeTh är upphovsperson så.. ;)
Någon else-konstruktion för Condcom finns inte. Normalt märker man upp sidan i standardiserad (X)HTML och använder sedan, om det behövs, dem för att applicera CSS som fixar IE-specifika problem. Jag är intresserad av hur din markup och CSS ser ut - kanske bör du testa ett annat tillvägagångssätt i den nivån istället?
Ett alternativ som kanske är värt att kolla upp är att applicera CSS via javascript, efter DOM:en laddats, då du lätt kan kolla upp användarens läsare och därefter importera relevant fil.
Tobias Sjösten
Jag var inne på
Jag var inne på javascriptlösningen ett tag, men dels är jag rätt så värdelös på det, dels kom jag på att det ju inte funkar eftersom divvarna (som alltså är olika beroende på webbläsare) sen ska innehålla php.
Jag återkommer med kod imorgon när jag är mindre grusig i ögonen och grumlig i hjärnan.
PS: ja, väldigt off-topic, men det är såklart okej för mig, om jag kan få hjälp att lösa detta på ett bättre sätt...:)
/Lena
/Lena
Nu blev jag osäker på vad
Nu blev jag osäker på vad ditt problem egentligen är. Du vill alltså inte bara applicera browser-specifik CSS utan också kunna skicka rätt chunk med (X)HTML beroende på vilken läsare som besökaren använder? I båda fallen skulle javascript kunna vara lösningen, speciellt med den sexiga jquery js-libben. ;)
Mer om jquery's stöd för en liknande funktion hittar du i jQuery's manual och du kan sedan utöka detta med jQBrowser. Sedan borde det inte vara svårare än:
$(document).ready(function () {if ($.browser.browser() == 'msie' && $.browser.version.number() == 6) {
$('head').append('<link rel="stylesheet" type="text/css" media="all" href="ie6.css" />');
} else {
$('head').append('<link rel="stylesheet" type="text/css" media="all" href="normal.css" />');
}
});
Eller liknande. Ovanstående är inte testat och innehåller säkert någon miss men du kanske förstår principen iallafall. Släng sedan ned allt i en .js och inkludera den i drupal med drupal_add_js().
Om ditt problem är att du också vill skicka med en viss (X)HTML beroende på webbläsare så kan du, i samma javascript, hämta denna med hjälp av AJAX och sedan injicera den i DOM:en.
Tobias Sjösten