På väg mot nivå 3: "Läs mer"-funderingar, views, cck etc

Events happening in the community are now at Drupal community events on www.drupal.org.
bobodrone's picture

Jag håller på att göra en nyhetsspalt och behöver tips på smartaste sättet att lösa en fråga (dvs finkod a lá "nivå 3")
Problemet är jätteenkelt men jag får inte till det som jag vill.

Jag använder tre fält i cck/views; Datum, rubrik(title) och nyhetstext(body/teaser) enligt:

2009-05-12
Jean Michelle Jarre spelar i Göteborg

Maecenas id quam porttitor ante dignissim
semper nec a lacus. In hac habitasse platea
dictumst. Duis quis sem sit amet mi posuere
euismod non vitae purus. Aliquam erat volutpat.

Jag skull nu vilja ha en "Läs mer..."-länk bredvid/under teaser-texten OM det finns mer innehåll, samt att den är länkad till själva noden.

Jag har löst detta genom att göra en egen modul (nivå 2) men vill nu veta det smartaste sättet att lösa detta med views/cck (nivå 3).

Har ngn ngt tips?

Comments

Follow up...

bobodrone's picture

I php skulle jag villkorstyra utmatningen av "Läs mer..."-länk.
Alltså jämföra om body/teaser vara likadana eller ngt i den stilen.

Kanske den enklaste lösningen är att ha ett eget fält i den contenttypen som heter typ "newsflash" eller ingress. ?
Jag tyckte det vara rätt effektivt att bara använda sig av body och låta textdelaren styra vad som skall synas i spalten och vad som visas i nodens fulltextversion.

Eller kanske ska jag skapa en views-template som gör villkoren där?

Är jag på rätt spår? :-)

Klurade ut det...

bobodrone's picture

oj vad enkelt det var.

Nod: länk (node view)

/ Shejken

Nej!

bobodrone's picture

Nu visar den "Läs mer..." på ALLA nyheter (teaser), även de som inte har mer att säga...
Suck.

Finns det någor där ute som har brottas med samma fundamentala problem som kan ge tips?!

med venelig hils
/ Shejkn

Do it the Drupal way...

dixon_'s picture

...or go to Drupal hell, som det så bekant heter :)

Lösning 1:

Brottas inte med ramverket, utan jobba med det istället... Antingen låter du "Läs mer"-länken ligga kvar. Eller så ser du till att länken behövs på alla nyheter genom att automatiskt korta av brödtexten till 200 - 300 tecken (då kommer nog majoriteten av dina nyheter kortas av). Det finns en smidig funktion för detta i Views - Trim this field to a maximum length. Leta runt lite när du lägger till ett Views-fält så hittar du.

Lösning 2:

Ett annat alternativ (kanske det bästa) är att du listar noderna med inställningen Row style satt till Node istället för Fields. Där efter kan du klicka i Display only teaser. På så vis använder Views mallen node.tpl.php i teaser-läget. Om då inlägget är längre än vad du bestämt att en teaser ska vara dyker "Läs mer"-länken upp.

Lösning 3:

Det sista alternativet är att du skriver en helt egen field handler som uppfyller dina önskemål. En handler (i Views) är en PHP-klass som definierar fält, argument, sortering, relationer eller annat som används när man skapar en View. Detta alternativ är ganska komplicerat och kräver god kunskap i om hur Views API fungerar.

Hoppas detta hjälper dig... Om du nödvändigtvis måste använda Fields som Row style och måste få bort "Läs mer"-länken på hela inlägg är nummer 3 den enda lösningen. Det går säker "hacka" sig runt på nått annat sätt. Men jag jobbar inte så ;)

--

It's all about simplicity - Senzilla

Theming då?

bobodrone's picture

Tack Dixon_ för ditt utförliga svar och dina egna synpunkter på problemet !!

Min fråga är ju rätt specifik i det här fallet om "läs mer"-länk, men min smått sublima fråga som kanske är mer intressant är frågan om hur man generellt tänker när man vill presentera sitt innehåll på ett specifikt sätt.

Vad jag förstår kan man ju använda sig av views-template-filer eller egna content-type-template-filer.
Fråga: Är theming genom dessa också att betrakta som att "hacka sig runt ett problem" eller är det den vanligaste vägen som man går?

I mitt specifika fall ser jag flera olika lösningar förutom de Dixon_ nämner och den fungerande block-modul jag redan byggt:

  • row:fields, theming av nod:teaser-fältet i egen templatefil där man jämför teaser med brödtextens innehåll och ev skriver ut "Läs mer...".
  • row:node, theming av node-MYCONTENTTYPE.tpl.php vilket dock också borde påverka utseendet i nodens vanliga visning.
  • det finns säkert flera "hack" för att lösa detta men jag är mer intresserad av att veta vilken modell som är vanligast och vilken väg som anses vara bäst ur stabilitet och effektivitets-hänseende.

SÅ:

Fråga: Vilken väg man generellt bör gå när man vill presentera sitt innehåll på ett specifikt sätt genom views ?
Då menar jag själva innehållets struktur och inte förändringar man kan göra med.css.

Här bjuder jag gärna in fler aktörer i frågan. Hur gör ni när ni vill ändra innehållets presentation i views?

mvh
/ Fredric Shejk Bergström

Det beror på hur mycket

dixon_'s picture

Det beror på hur mycket struktur du måste ändra på. Att ändra på node-TYPE.tpl.php ska inte ses som ett "hack" så länge som du bara ändrar HTML-strukturen. Själva programmeringslogiken skall man alltid hålla undan från temafilerna, det hör hemma i hook_preprocess_node().

När det gäller att styla views så har jag aldrig stött på en situation där jag behöver mer flexibilitet än vad CSS och Views-funktionen Rewrite the output of this field erbjuder. Där kan du enkelt göra Node: Node title-fältet till en rubrik eller liknande. Försök använda den funktionen först, istället för att skapa en template för fältet.

Om du fortfarande behöver ändra mer struktur och themeing i Views bör du nog fundera på din CCK-arkitektur. Kanske använder du fel typer av fält och måste normalisera datan mer?

--

It's all about simplicity - Senzilla

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: