dynamicweb



26 Jul 10

Jeg arbejder professionelt med implementering af CMS baserede hjemmesider. Det system jeg arbejder klart mest i er Dynamicweb CMS – et system som efter sigende har omkring 4000 fungerende (et korrekt ord?) hjemmesider i hele verden – primært i norden. Som andre systemer så kommer der jævnligt opdateringer – det er jo dejligt med nye up-to-date funktionalitet. Så langt så godt – men jeg vil gerne prøve at sammenligne kort med en anden branche.

Min Toyota kontra Dynamicweb CMS

Jeg er den lykkelige ejer af en Toyota. Tidligere ejede jeg en Yaris og da den var ca. 2 år gammel modtog jeg et brev om at man havde konstateret at der kunne opstå et problem med bremserne under visse ekstreme omstændigheder. Jeg skulle bare køre ind til et selvvalgt Toyota værksted og de ville rette fejlen uden beregning. Hverken mig eller værkstedet ville blive lastet for noget i den forbindelse. Det er service!

Og nu til Dynamicweb CMS… Jeg oplever jævnligt at der opdages fejl som opstår på grund af fejl i Dynamicweb CMS. Jeg arbejder jo som sagt professionelt hos en Dynamicweb CMS Partner (Bleau A/S) og det er nok noget der i ovenstående situation med Toyota må være at betragte som at arbejde på et “autoriseret Dynamicweb værksted”. Selv om Dynamicweb CMS også selv finder fejl og retter dem uden beregning gennem hot-fixes, så er situationen fra før med fejlen på bilen i en Dynamicweb CMS verden normalt noget anderledes:

  1. Brugeren (chaufføren) oplever at noget ikke fungerer i hans “bil” (hans hjemme side)
  2. Han kontakter værkstedet
  3. Værkstedet må bruge megen tid på at fejlfinde og bevise overfor Dynamicweb CMS support at fejlen er noget der ligger i selve Dynamicweb
  4. Dynamicweb CMS anerkender måske at der er en fejl, men det medfører ikke at fejlen rettes. Fejl prioriteres naturligvis af Dynamicweb CMS.
  5. Brugeren må så acceptere at der ikke kommer en løsning “sådan lige”

Som professionel konsulent er det svært

  • At forklare overfor kunden at det er kundens problem.
  • At kunden vil blive faktureret den tid som vi har brugt på at finde fejl i det system vi har anbefalet dem.
  • At problemet ikke umiddelbart er blevet løst.
  • At en løsning vil koste yderligere tid (=penge).
  • At løsningen ikke nødvendigvis giver en forbedring.

Intet er fejlfrit! – men hvem skal nu betale?

Der er mange elementer i ovenstående sammenligning der kan anfægtes og en sammenligning mellem en bil og et CMS system er måske unfair. Det som jeg her forsøger at starte en diskussion om og brokker mig over er at det ikke er rimeligt at kunderne alene skal betale for noget som kan påvises er fejl i det produkt de har købt.

  • Jeg ville personligt aldrig betale for reperationen hvis min fladskærm holdte op med at virke indenfor garentiperioden! Det måtte producenten betale for (gennem forhandleren).
  • Jeg mener at det er i alles interesse at fejl rettes, så produktet bliver bedre.

Jeg har ikke en færdig model for hvordan man kunne løse problemet med at få dækket omkostninger ved fejl. Der er tre parter som burde dele omkostningen – brugerne, forhandlerne (partnerne) og Dynamicweb CMS. Idag er det kun de to første der betaler! Jeg tror på sigt at hverken brugere eller forhandlere kan leve med den model!

P.s: Ovenstående står for min egen personlige regning.


Filed under: dynamicweb, inspirovation

Trackback Uri






29 Jun 10

In Dynamicweb CMS when you click to a detail view of a news item you will by default get a parameter “M=News” or “M=NewsV2” depending on the News Module version. That parameter will make your details view render incorrect. You can fix it in your template, but if you use the RSS feed of news items, you cannot do that.

The javascript below will fix that problem by redirecting the page to an URL without those two parameters. It is a simple javascript, just insert it into the HEAD section.

<script type="text/javascript">

// Dynamicweb CMS fix: Make sure that details view of news item is rendered correct

// Insert in Master page in HEAD section

// Will redirect to same URL but with any "M=News/M=NewsV2" removed

// 2010-06-29: Sten Hougaard, Bleau A/S

var loc = document.location+'';

var newLoc = loc.replace('&M=NewsV2', '').replace('&M=News', '');

if (loc!=newLoc) {

 document.location = newLoc;

}

</script>

Filed under: Code, dynamicweb

Trackback Uri






24 May 10

Jeg var så uheldig at blive forhindret i at deltage i præsentationen af Dynamicweb 7.1, men heldigvis har jeg jo #Dynamicweb som en search kolonne i min Adobe Air baserede Twitter klient: “TweetDeck” – der kan jeg jo følge med og har da læst mange spændende kommentarer.

Jeg har så valgt at kigge på den dokumentation som man kan finde på “Dynamicweb engage”. Der er flere dokumenter som hver i sær fortæller om ændringer. Jeg vil her gennemgå dem jeg har kigget på.

Bug fixes included in Dynamicweb 7.1

Jeg fandt 49 (dokumenterede) bug fixes, og de fordeler sig jævnt over både Dynamicweb CMS og Dynamicweb eCommerce. Hvis man har prøvet at indrapportere en case som så er blevet anerkendt som en bug, så vil man faktisk modtage en e-mail i forbindelse med at disse bugs er blevet rettet – så det er lidt ligesom at få skatteopgørelsen fra skat hver år! Har du fået en e-mail er du heldig – din bug er blevet fixet… Har du ikke, nå, du må vente lidt på en hot-fix eller næste release… :-)

Jeg så ikke så mange improvements i denne liste – men det har sin naturlige forklaring – forbedringere har fået sine helt egne dokumenter! Dynamicweb 7.1 er jo en stor forbedring af Dynamicweb CMS og eCommerce.

Technical release notes, Dynamicweb 7.1

Jeg går lige i kødet på det jeg har kunne læse mig frem til i denne PDF fil.

2.1.2 Global tags section in navigation XML

Dette er jo bestemt en relevant og god ting når man skal lave navigation på et website, at man har adgang til de globale information der ligger i global tags. At det skulle være noget nyt for Dynamicweb 7.1 – hmm… det er jeg nu ikke så sikker på :-) I de løsninger som kører på 7.0xx er der allerede dette tilgængeligt. Se her – et screenshoot af en del af den XML som er tilgængeligt på Bleau’s hjemmeside:

et screenshoot af en del af den XML som er tilgængeligt på Bleau’s hjemmeside

Men – fedt er det at man har det tilgængeligt i XML’en! Ingen tvivl om det :-) Faktisk tror jeg at en de nævnte forbedringer allerede er blevet frigivet inden 7.1.

2.1.3 Support for relative xsl:import

Min kære kollega Morten Bengtson (Twitter: http://twitter.com/mbengtson) blev takket i forbindelse med denne forbedring. Jeg synes også at det er på sin plads i den forbindelse lige at takke den anden vej: Tak DW for at I lytter når I får velbeskrevne forbedrings ønsker ind!

Inden man kunne anvende relative stier i XSL:import var det praktisk talt urealistisk at lave seriøs anvendelse af biblioteker og delt data på tværs af XSLT templates. Det er nu realtistisk at have XSLT templates og XML data liggende i biblioteker som man så flere steder kan tilgå i sine templates. Endnu et argument for at anvende XSLT templates.

2.1.4 Limiting loops in XSLT

Jeg har tidligere stødt på denne “forbedring”. Lige pludselig var der nogle data i loops der lå “langt nede” i eCommerces relative dybe loop-struktur som var ikke eksisterende. Det er så når man fra Dynamicwebs side har ment at det kunne være smart at man kunne begrænse hvilke loops der blev gennemløbet gennem denne “forbedring”. Men den ryger i kategorien:

Man begår kun fejlen – ikke at forholde sig til hvilke loops der skal med – een gang! :-)

I toppen af din XSLT skal du bare huske at fortælle DW hvilke loops du vil have med ud:

<xsl:variable name="availableloops" select="'Groups,Products'" />

Men det skal lige nævnes at DW siger at hvis man har fulgt deres anbefalinger om at matche således loop[@name='aLoopName'] så er den hellige grav velforvaret. Åh, og så kan du iøvrigt også være doven og skrive “*” i den variabel “avilableloops” – så får du bare ikke performance forbedring.

2.3.2 Search page

Okay, man har nu tilføjet endnu en templatetag som kan anvendes så man ikke skal hardcode ID’er ind til den side hvor man nu har sit søgeresultat….

<!--@DwAreaSearchPageID-->

Jeg må sige at jo – det kan da være en god ting og er endnu et patch/quick help-fix som gør det nemmere for…? Frontendere? Kunder? Øh… jeg er i tvivl.

Taggets værdi baseres på noget som jeg mener er relativt gaffatape-agtigt:

..It is now possible to retrieve the first created search page in the current area by using this

new template tag.

  1. Så må jeg jo passe på at jeg ikke indsætter searchresult moduler ind for så bliver de jo lige pludselig target for mit søgeresultat!
  2. Hvis jeg har flere søgninger på et site (en der søger generelt i sider, en der søger i HR, en der søger i eCommerce), så kan jeg ikke bruge denne tag til noget…

4.2 Getimage.aspx

Der er nogle forbedringer, jeg havde en dialog med Nicolai Petersen (twitter: http://twitter.com/nicped) hvor jeg forsøgte at argumentere for at man kunne få Getimage.aspx til at indpasse et billede til både højde og bredde. Jeg har ikke kunne læse mig til det – men afventer svar fra http://twitter.com/nicped.

Hvis man f.eks. satte både højde og bredde til 100 ville man med henholdsvis et bredformat og højformat billede automatisk få en indpasning af hele billedet i både bredde og højde som vist her:

GetImage.aspx som den kan tage sig ud - her er valgt både højde og bredde på 100px

Resultatet:

 

image

4.3 404 on area

Det er rigtig godt – nu kan man have en “404 not found” side pr. sproglag! Cool når man anvender Dynamicweb med sproglag som ikke nødvendigvis er samme firma! :-)

4.5 Google JS API includes

Det er spændende – det er en måde at få ensartet anvendelse af frontend javascript implemtering metoder. Jeg har så stor forventning i forhold til om der også er lavet en generisk måde at inkludere javascript og CSS på i forhold til enkelte moduler på afsnit. Et rygte (og et screenshoot jeg har set) viser at man for alle moduler ovenover settings har settings: en til valg af javascript fil og en til valg af stylesheet. Dette gør at man kan nøjes med at hente f.eks. jQuery plugins ind når de skal bruges. Om det så er kommet med i 7.1 kan jeg ikke læse mig til ud af dokumentationen – jeg må vente jeg får fingerne i en live version – eller en eller anden der har prøvet det eller bare ved det kommenterer på denne blog post :-)

Konklussion

Jeg har været kritisk her i denne post – indrømmet. Jeg er ikke i tvivl om at jeg senere vil skrive et andet indlæg hvor jeg kan fortælle om alle de rare forbedringer som er med i DW 7.1! Men jeg mener også at det er vores sure pligt som brugere af systemet at markere når der er noget man ikke synes er helt forståeligt eller optimalt. Generelt synes jeg at det jeg har hørt og læst om DW 7.1 er positivt og det tyder på at man forsøger at streamline produktet, at gøre det nemmere at anvende det og forbedre faciliteterne. Udfra Dynamicweb 7.1 technical release notes har jeg kunne skrive ovenstående – det er derfor vigtigt at have det i baghovedet: Jeg har skrevet om det dokument – ikke en anmeldelse af DW 7.1! Den kommer senere! :-)


Filed under: Code, dynamicweb

Trackback Uri






25 Jan 10

When using the eCommerce system in Dynamicweb CMS you can add a param to the form which will then send the user to the basket after he/she have added an item to the basket. That is sometimes a logical step for some shop types. The soloution is simpel, just add a param called redirect as a hidden input field like this:

<input type="hidden" name="redirect" id="redirect" value="/default.aspx?id=156" />

In this example Dynamicweb will send the user to the page with the ID 156 when the form is submitted.


Filed under: dynamicweb

Trackback Uri






19 Dec 09

When I build websites in Dynamicweb CMS I use XSLT templates. At the moment it is based on XSLT 1.0 which in its XSLT nature ofcause is much stronger than HTML based templates, but somehow limited compared to all the nice features which are defined in XSLT 2.0.

You may however extend to the extreme the facilities by using C# code in XSLT! I will start writing about the things I discover in this direction, writing about pros and cons. For now I wil not give any concrete examples, only mention that I have made an XSLT templates which gets a RSS feed (does a remoteHTTP request) and displays the transformed contents on a Dynamicweb page! Very cool! Something which I actually could not do without having to code my own Dynamicweb module!

It Rocks and I will start to think this into future templates – taking into account ofcause the pros and cons of that path!! This might just prove to be the best christmas present in the IT area of my life, this year!


Filed under: C# in XSLT, Code, dynamicweb

Trackback Uri






17 Dec 09

So far if you are working on a Dynamicweb website you had to use the backend “filemanager” or buy a FTP account for your website if you wanted to work with the files on the site. With the latest release Dynamicweb 7,  it is now possibel to use webdav, allowing you to open and save directly on the server from your computer!

image

What you have to do is to setup a virtual path in “Management center > Web and HTTP > Webdav”. Next you need to create a connection to a networkdrive on your computer:

image

I use windows vista and the above is how it might look in that  windows vista.

You will then be promped for username and password, which is the administrator username and password. When that is done – if everything goes well – you will have a new drive which points to the “/files” section of the Dynamicweb website!

From there on you can treat the webdav based "network drive” as a normal drive! You can copy and paste from local drives, open documents directly and well everything you are used to working on local drives! Very nice improvement! Well done Dynamicweb! :-)


Filed under: Code, dynamicweb

Trackback Uri






14 Sep 09

I have had the chance to examine a beta version of Dynamicweb 7 – the soon to be released (mid September 2009) by Dynamicweb Systems. I decided to write the impression down here to anyone who might be interested in this new release.

I will be writing about the “backend” of the system – this is where you mange your content.

Please excuse me if some of the features mentioned are not new to this version! :-) I tend to focus on the parts of DW which I use as a frontend developer! :-) I will be writing as I watch and learn, so probertly this will only be the first part of a series of articels (not sure of that however).

So here we go:

imageOffice 2007 look’n’feel
In general the whole system has been given a facelift towards a office 2007 look’n’feel. I will not judge if this is cool or not – but it will make it feel familar for many of the editors allready using the MS Office 2007 package.

 

 

 

image imageThe filemanager (filarkiv)
One thing I saw at once is the option to view the files in various ways – like you can in Windows Vista. So you have the details views you allready know + 3 other views.

On each image you can see many details about the image if you choose properties. You can even see where it is used (under the tab “References”, and click to go directly to that paragraph. Nice work!

image

An image editor…
Images can be edited in a new image editor. To be honest this is something which I personally will never use – but respect must be given to the people at DW: The product will be more friendly for some of the users – people who have small websites and might be able to save money when doing simple image editing with this tool instead of paying an advertisement agency for doing that part. The tool looks nice – well done DW!

The editor… oh no…. again…
It the last release – you might call it a pre-release of the current user interface – the editor messed up my code, which lead to me never (!) using the otherwise nice features which it offered. The big problem is that when you write code like Dynamicweb tags – say: <!—@test-->, the editor would change it to !—@test– when you finished the tag! So you never knew if what you wrote was “intelligently” converted into something else. I wonder if the control which it is based is a version of Microsoft frontpage:-)

The templates – my christmas (2009!) wish!? :-)
The version which I have been able to play with did not have the templates included. On that field many people have been looking forward to a new set of div based templates. I wish that sometime (soon?) Dynamicweb will release two sets of DIV baesed templates: HTML and XSLT versions!

image The navigation tree
As far as I can see many resources have been put into making the page creating and handling easier (for newcommers?). One example is the “Page templates” part of the navigation tree. Pages you put here becomes “master pages” you can use when inserting new pages! Very smart! This will be very usefull as it is more intuative that the old way of adding pages of different style and content. Nice move DW!

Pages have many improvements, here are a few:

  1. Meta data on each page, now with auto suggestions…
  2. Automatic HTML validation on a page, with a link to view what does not validate:
    image
  3. Global paragraph’s are now a viewed as collection of paragraphs. So when you choose insert global paragraph you get one window containing the global paragraphs which are defined! Cool!
  4. Much enhanced user control!

Things which I have not yet touched
I know that a much expected Data manager has been released as a module in beta. I allows you do handle basic database related things in a more elegant way than in database publisher.

The “SQL Firehorse” have been released to all users! You can execute SQL statements in a sort of query analyser fashing! Nice nice – and can be dangerous!!! Watch you queries!

I am getting tired for tonight – perhaps I find resources another night to write more, and maybe after I have seen the final release this wednesday I will be inspired! See you then!


Filed under: dynamicweb

Trackback Uri






23 Jun 09

Sebastian Dammark is working at Dynamicweb Systems. He has produced some video casts which can help you if you are implementing websites using Dynamicweb CMS. Here is an example:

Find other video casts here


Filed under: Code, dynamicweb

Trackback Uri






13 Jun 09

In the CMS system I work with – Dynamicweb CMS – content is build around various templates, each containing a output from the system. The output is generated using ASP.NET and each bit of content is represented in a “tag”. For instance if you want the name of the user which has logged on the page you enter

<!—@Global:Extranet.Name-->

Such templates are based on HTML, it is: You create static parts of HTML and insert tags where you want the system to insert dynamic content.

You might want to do something like this:

...<div>Hi <!—@Global:Extranet.Name-->!</div>...

So far so good! But what if the user has not logged in? You will need to do one of three things:

The Javascript soloution

Put shortly: Using javascript to control which content is shown is basically not a good idea. But today almost anyone browsing the net has javascript turned on, and the trend (IMHO) goes towards very powerfull javascript parts. Another discussion is that: “Why give a visitor contents if you allready before you start sending information (HTML) that the content is not really relevant?”. Well, another article about that.. :-) Here goes:

...<script type="text/javascript">
if ('<!—@Global:Extranet.Name-->'!='') {
document.write('<div>Hi <!—@Global:Extranet.Name-->!');
}
</script>...

The CSS soloution

This is actually not a way which I would say always works! But the theory is that you put CSS classes  on HTML tags that are build around a classname-prefix (“customerNumber” for instance) and then add the dynamic value from Dynamicweb CMS as postfix. So if a user has logged in a classname would be for instance “customerNumber342” for a customer with the number 342. A customer who has not yet logged in would give a classname “customerNumber”. So if we by default hide the classname “customerNumber” any other classnames would be displayed! :-) Cute right? But the problem can rise when sometime certain Dynamicweb template tags are not replaced, even if it has no value. That way you might end up with

“customerNumber<!--@Global:Extranet.CustomerNumber-->”

That would even be invalid HTML! :-( Anyway here is how a CSS based soloution could be.

<head>.. <style type="text/css">
.customerNumber {display: none;}
</style>
..
</head><body>
...
<div class="customerNumber<!--@Global:Extranet.CustomerNumber-->">
Hi <!—@Global:Extranet.Name-->!
</div>

The If Defined soloution

Dynamicweb CMS offers a way to check if a tag has content, and only pass the  content within the IF-ENDIF if a tag has content.

<!--@If Defined(Global:Extranet.Name)-->
<div>Hi <!—@Global:Extranet.Name-->!</div>
<!--@EndIf(Global:Extranet.Name)-->
...<div>Hi <!—@Global:Extranet.Name-->!</div>...

These are just 3 ways of making workaround in Dynamicweb CMS, you could ofcause come up with more! For instance combining the javascript and CSS soloution.

XSLT Templates comes to our rescue – well almost!

Imagine that you build your content using XSLT: Dynamicweb CMS will build a XML document containing all the “template tag values” in a structured way. A tiny bit of this XML document might be:

...<Global.Extranet.Name>342</Global.Extranet.Name>...

So this way you decide if it is relevant to produce output based on “real” values! You can use the power of XSLT/XPATH to decide what to do. An example:

<xsl:if test="Global.Extranet.Name!=''">
<div>Hi <xsl:value-of select="Global.Extranet.Name" />!</div>
</xsl:if>

All this is done before the content has been send to the client (in Dynamicweb Backend). It is a clean powerfull way to produce exactly what is needed for the page to render as wished.

Nothing is perfect…

When all this is said, I must warn you: The XSLT templates path is – I am sad to say – not always perfect in Dynamciweb CMS. The XML document does not always have all tags. I have some workarounds which I will write about in a later article.

You can see all template tags at templates.dynamicweb.dk.


Filed under: Code, dynamicweb

Trackback Uri






28 Jan 09

If you want to log onto a dynamicweb based website as an extranet user you can simply add username and password params to the ur! If for instance your website is http://www.bleau.dk and you want to login as “visitor” with the password “mypassword” the url should be: http://www.bleau.dk/?username=visitor&password=mypassword


Filed under: dynamicweb

Trackback Uri