Avatar billede c-lund Nybegynder
23. marts 2004 - 13:09 Der er 16 kommentarer og
2 løsninger

Nyheds system

Hej.
jeg står og skal bruge et system der kan udtrække et bestemt antal linier eller ord ud fra en database.
og når man så trykker på et "læs mere" link. så skal den udvide sig, så man se hele nyheden.
ved ikke helt hvordan jeg skal gribe det an.

eks.
http://www.urbaneye.dk/nyhed.gif
Avatar billede c-lund Nybegynder
23. marts 2004 - 13:12 #1
den skal vise 3 nyhedder af gangen, altså 3 boxe. så når der kommer en ny nyhed i databasen, så skal den stå i den øverste box, og de andre skal rykke en gang ned.

mvh
Christian
Avatar billede skg Nybegynder
23. marts 2004 - 13:13 #2
er det outsourcing at spørge på eksperten ?

( læste lige på forsiden af jeres website )
Avatar billede c-lund Nybegynder
23. marts 2004 - 13:23 #3
hvis der ikke er så mange penge at spille rundt med, ja så er det outsourcing at spørge på eksperten.
hvis vi betalte for det vil vi få det hurtigere.
hvis man spørger på eksperten tager det lidt længere tid.
men der er jo bare hvad man vælger.
Avatar billede keysersoze Ekspert
23. marts 2004 - 13:37 #4
www.netcoders.dk - www.activeserverpages.dk

kig på de sider hvor der med garanti er masser af systemer der bare kræver lidt tilretning. At få lavet et fra bunden af en på E udelukkende for point tvivler jeg på kan lade sig gøre - så prøv at led lidt på de sider
Avatar billede c-lund Nybegynder
23. marts 2004 - 13:41 #5
tak, jeg kigger mig lige omkring
Avatar billede skg Nybegynder
23. marts 2004 - 13:43 #6
keysersoze > skal jeg så være flov over at have lavet det ? :-)

Det er ikke kønt, men det virker da her hos mig

<%option explicit%>
<style>
.newsItem
{
border:1px solid red;
}

.newsItem .newsItemTxt .hidden
{
display:none;
}

.newsItem .newsItemTxtFull .hidden
{
display:inline;
}

</style>

<script>
function toggleNewsTxt( id )
{
    var item = document.getElementById( 'newsItem' + id );

    if( item.childNodes(0).className == 'newsItemTxt' )
    {
        alert( '11' );
        item.childNodes(0).className = 'newsItemTxtFull';
    }
    else
    {
        alert( 'dd' );
        item.childNodes(0).className = 'newsItemTxt';
    }
   
}
</script>

<%

//rod lidt rundt med det, dine nyheder burde komme fra noget ala
//set news = conn.execute( "Select * from News Order By Created" )

dim News, NewsItem
News = array( Array( 0, createRndText() ), Array( 1, createRndText() ), Array( 2, createRndText() ) )


'Do While( news.eof = false )

For Each NewsItem in News

    call writeNewsItem( NewsItem(0), NewsItem(1) )

    'news.MoveNext
Next

'Loop

Function writeNewsItem( ID, Text )

    Dim TextWords, HowManyWordsShouldBeShown
    HowManyWordsShouldBeShown = 5
    TextWords = split( Text, " " )

    Response.Write( "<div onclick=""toggleNewsTxt(" & ID & ")""  id=""newsItem" & ID & """ class=""newsItem""><div class=""newsItemTxt"">" )

    If UBound( TextWords ) <= HowManyWordsShouldBeShown Then
        Response.Write( Text )
    Else
        Dim I
   
        For I = 0 To HowManyWordsShouldBeShown
            Response.Write( TextWords(I) & " " )
        Next

        Response.Write( "<span class=""hidden"">" )

        For I = HowManyWordsShouldBeShown To UBound( TextWords )
            Response.Write( TextWords(I) & " " )
        Next
        Response.Write( "</span>" )
    End If

    Response.Write( ID )

    Response.Write( "</div></div>" )

End Function


Function createRndText()
    createRndText = "yeah yeah yeah yeah yeah yeah yeah yeah yeah yeah yeah yeah"
End Function

%>
Avatar billede keysersoze Ekspert
23. marts 2004 - 14:22 #7
skg >> næh - det skal du skam ikke. Hvis du vil bruge tid og kræfter på at levere færdig kode til nogle der tjener penge på det du har lavet er det da fint med mig... og hvis du kører videre med den stil så har jeg da også et par ting du gerne må lave for mig :)
Avatar billede skg Nybegynder
23. marts 2004 - 14:26 #8
keysersoze > når man er jobsøgende får man jo tid til at sidde herinde og spille smart :-)
Avatar billede c-lund Nybegynder
23. marts 2004 - 14:32 #9
fedt at i gider at hjælpe. kan dog ikke helt overkue den der kode, syntes der mangler noget conn til databasen.

<%

//set news = conn.execute( "Select * from News Order By Created" )

dim News, NewsItem
News = array( Array( 0, createRndText() ), Array( 1, createRndText() ), Array( 2, createRndText() ) )


'Do While( news.eof = false )
Avatar billede skg Nybegynder
23. marts 2004 - 14:39 #10
det kunne være:

Set conn = server.createobject("ADODB.connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=enstitilenaccessdatabase.mdb"
Avatar billede c-lund Nybegynder
23. marts 2004 - 15:00 #11
hvad for nogle felter skal der være i databasen
Avatar billede c-lund Nybegynder
23. marts 2004 - 15:10 #12
er det her rigtigt. for den siger fejl ved linie 28 ('Null' is null or not an object)

<html>

<head>

<style>
.newsItem
{
border:1px solid red;
}

.newsItem .newsItemTxt .hidden
{
display:none;
}

.newsItem .newsItemTxtFull .hidden
{
display:inline;
}

</style>



<script>
function toggleNewsTxt( id )
{
    var item = document.getElementById( 'newsItem' + id );
    if( item.childNodes(0).className == 'newsItemTxt' )
    {
        alert( '11' );
        item.childNodes(0).className = 'newsItemTxtFull';
    }
    else
    {
        alert( 'dd' );
        item.childNodes(0).className = 'newsItemTxt';
    }

}
</script>



</head>

<body>


<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("db1.mdb")
set news = Conn.execute( "Select * from News Order By Created" )


dim News, NewsItem
News = array( Array( 0, createRndText() ), Array( 1, createRndText() ), Array( 2, createRndText() ) )


'Do While( news.eof = false )

For Each NewsItem in News

    call writeNewsItem( NewsItem(0), NewsItem(1) )

    'news.MoveNext
Next

'Loop

Function writeNewsItem( ID, Text )

    Dim TextWords, HowManyWordsShouldBeShown
    HowManyWordsShouldBeShown = 5
    TextWords = split( Text, " " )

    Response.Write( "<div onclick=""toggleNewsTxt(" & ID & ")""  id=""newsItem" & ID & " class=""newsItem""><div class=""newsItemTxt"">" )

    If UBound( TextWords ) <= HowManyWordsShouldBeShown Then
        Response.Write( Text )
    Else
        Dim I
   
        For I = 0 To HowManyWordsShouldBeShown
            Response.Write( TextWords(I) & " " )
        Next

        Response.Write( "<span class=""hidden"">" )

        For I = HowManyWordsShouldBeShown To UBound( TextWords )
            Response.Write( TextWords(I) & " " )
        Next
        Response.Write( "</span>" )
    End If

    Response.Write( ID )

    Response.Write( "</div></div>" )

End Function


Function createRndText()
    createRndText = "yeah yeah yeah yeah yeah yeah yeah yeah yeah yeah yeah yeah"
End Function

%>



</body>
</html>
Avatar billede hnteknik Novice
23. marts 2004 - 15:58 #13
Der findes en hop eks. på, hvordan man forkorter teksten med i en kortfattet newspost:

Function VisLidt(sText,iCount)
        'Fjerner kommaer da det ikke ser så smart ud med et komma til sidst i en sætning
        sText = Replace(sText,",","")

        'Fjerner breaks
        sText = Replace(sText,"<br>"," ")

        'Splitter teksten ved mellemrum
        sTempSplit = Split(sText," ")

        'Sætter min midlertidige textstreng til ingenting
        sTempText = ""

        'Hvis iCount er større end den fulde artikel sættes iCount til artiklens længde
        If iCount > Ubound(sTempSplit) Then
                iCount = Ubound(sTempSplit)
        End If

        'Laver en sætning med antal (iCount) ord
        For i = 0 to iCount
                sTempText = sTempText & chr(32) & sTempSplit(i)
        Next

        'Hvis der er flere ord i artiklen sættes "..." på for at vise at den fortsættes
        If iCount < Ubound(sTempSplit) Then
                sTempText = sTempText & "..."
        End If

        'Færdiggør teksten til udskrift
        VisLidt = sTempText
End Function

sArtikel = "Dette er min artikel som jeg egentlig ikke ønsker at vise i fuld længde på forsiden,<br>" & _
"så derfor skal den gerne køres igennem en funktion som nedkorter den.<br>" & _
"Dog skal det siges at den meget nødigt må blive splittet midt i et ord!"

'Hvor mange ord skal vises
iOrd = 15

'Udskriv artiklen beskåret
Response.Write VisLidt(sArtikel,iOrd)
-----
Function GetNewsHeader(InputString, MaxNumber)
Dim inCount

For inCount = LBound(Split(InputString, " ")) To MaxNumber - 1
GetNewsHeader = GetNewsHeader & " " & Split(InputString, " ")(inCount)
Next
End Function
---------------------

<%
Function CutStr(Str, NumOfChars)
If Len(Str) > NumOfChars Then
Str = Left(Str, InStrRev(Str, " ",NumOfChars))
End If
CutStr = Str
End Function

sArtikel="Dette er min artikel som jeg egentlig ikke ønsker at vise i fuld længde på forsiden,<br>" & _
"så derfor skal den gerne køres igennem en funktion som nedkorter den.<br>" & _
"Dog skal det siges at den meget nødigt må blive splittet midt i et ord!"
%>

<%=CutStr(sArtikel,150)%>
Avatar billede skg Nybegynder
23. marts 2004 - 16:09 #14
c-lund > måske burde du outsource det *G*

men anyway : smid hvad du har brug for i DB'en, f.eks:
Tabel news:
  Id, Header, Text, Created

og så skal du hente teksten fra dit News recordset, ikke det array jeg brugte til at teste. Slet de linier der opretter array'et, og createRndText er også overflødig herefter.

Do While( news.eof = false )

    call writeNewsItem( news("Id"), news("Text") )

    news.MoveNext
Loop
Avatar billede c-lund Nybegynder
23. marts 2004 - 16:43 #15
tror er jeg må droppe det.
men den siger stadig fejl ved linie 28

-------------------------
<html>

<head>

<style>
.newsItem
{
border:1px solid red;
}

.newsItem .newsItemTxt .hidden
{
display:none;
}

.newsItem .newsItemTxtFull .hidden
{
display:inline;
}

</style>



<script>
function toggleNewsTxt( id )
{
    var item = document.getElementById( 'newsItem' + id );
    if( item.childNodes(0).className == 'newsItemTxt' )
    {
        alert( '11' );
        item.childNodes(0).className = 'newsItemTxtFull';
    }
    else
    {
        alert( 'dd' );
        item.childNodes(0).className = 'newsItemTxt';
    }

}
</script>



</head>

<body>


<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("db1.mdb")
set news = Conn.execute( "Select * from News Order By Created" )



dim News, NewsItem


Do While( news.eof = false )

    call writeNewsItem( news("Id"), news("Text") )

    news.MoveNext
Loop

Function writeNewsItem( ID, Text )

    Dim TextWords, HowManyWordsShouldBeShown
    HowManyWordsShouldBeShown = 5
    TextWords = split( Text, " " )

    Response.Write( "<div onclick=""toggleNewsTxt(" & ID & ")""  id=""newsItem" & ID & " class=""newsItem""><div class=""newsItemTxt"">" )

    If UBound( TextWords ) <= HowManyWordsShouldBeShown Then
        Response.Write( Text )
    Else
        Dim I
   
        For I = 0 To HowManyWordsShouldBeShown
            Response.Write( TextWords(I) & " " )
        Next

        Response.Write( "<span class=""hidden"">" )

        For I = HowManyWordsShouldBeShown To UBound( TextWords )
            Response.Write( TextWords(I) & " " )
        Next
        Response.Write( "</span>" )
    End If

    Response.Write( ID )

    Response.Write( "</div></div>" )

End Function

%>

</body>
</html>
Avatar billede skg Nybegynder
23. marts 2004 - 16:45 #16
så vidt jeg kan se er linie 28 i javascript'et ?
Avatar billede c-lund Nybegynder
23. marts 2004 - 17:29 #17
ja, det er i javascriptet

var item = document.getElementById( 'newsItem' + id );
Avatar billede skg Nybegynder
23. marts 2004 - 20:43 #18
hvis der ikke bliver skrevet noget id ud fra databasen er det jo derfor. Du må da kunne se om den html der bliver spyttet ud på siden er korrekt. Evt. kan du prøve at lave det uden ASP koden til at starte med, og så bygge det ind når du har fået HTML/CSS/JS'en til at virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester