Toon posts:

[PHP] ">" Teken

Pagina: 1
Acties:
  • 40 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik heb dit stukje code verzameld/gemaakt om titels in een menu die lang zijn als 30 tekens af te kappen met " ...". Maar ik heb zo het id dat PHP dit teken > niet als "groter dan" ziet zoals ik dat wil.

Hij zou namelijk als die string meer als 27 tekens had de puntjes erachter moeten zetten omdat die dan afgekapt is.

PHP:
1
2
3
4
5
6
7
$mnu_titel = substr($mnu_titel,0,30); 
foreach (count_chars($mnu_titel) as $waarde) { 
    $mnu_titel_lengte = $mnu_lengte + $waarde; 
} 
if ($mnu_titel_lengte > 27) {
    $mnu_titel .= " ...";
}


Code voor het tellen van het aantal tekens komt uit dit antieke topic:
[rml][ php]aantal characters in variabele[/rml] de dank gaat uit naar DiSiLLUSiON

Wat is wel het juiste teken? Of doe ik gewoon iets doms?

[ Voor 8% gewijzigd door Verwijderd op 11-05-2004 20:04 ]


  • sjoerdb2
  • Registratie: Juli 2001
  • Laatst online: 09-05-2025
in het zelfde topic staat ook
PHP:
1
2
3
if (strlen($text)> 65) { 
    $text = substr($text, 0, 65); 
}
dus voor jouw situatie:
PHP:
1
2
3
if (strlen($mnu_titel) > 30) { 
    $mnu_titel= substr($mnu_titel, 0, 27)."..."; 
}

[ Voor 22% gewijzigd door sjoerdb2 op 11-05-2004 20:07 ]


Verwijderd

Topicstarter
sjoerdb schreef op 11 mei 2004 @ 20:06:
in het zelfde topic staat ook

[...]


dus voor jouw situatie:
PHP:
1
2
3
if (strlen($mnu_titel) > 30) { 
    $mnu_titel= substr($mnu_titel, 0, 27)."..."; 
}
Ja dat vind ik grappig, maar de reden dat ik bovenstaande code gemaakt heb is dat de code die jij nu quote altijd ... achter de titels zit.

Verwijderd

Pieter,

De functie count_chars telt vanalle bytes (tussen 0 en 255) hoeveel keer een byte voorkomt. Jou foreach loop wordt dus 256 keer doorlopen. Het is dus een hele andere functie, die je niet moet gebruiken voor het tellen van de stringlengte. De code van Sjoerd is de juiste code voor je. En inderdaad het zet drie punten achter de eerste 27 karakters van de titel, precies wat je wilt.

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Wil je dat niet?
Gaat het hier niet fout?
- $mnu_titel_lengte = $mnu_lengte + $waarde;
Vaak plakt PHP of JS de 2 waardes achter elkaar ipv optellen.
Dan heb je 10 + 4 = 104;
Doe eens een echo $mnu_titel_lengte voor de if

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mag ik vragen waarom je in hemelsnaam een count_chars doet en met foreach alles langs gaat? Waarom gebruik je niet gewoon strlen () ?

En wat probeer je nu te doen? De "..." wil je blijkbaar niet achteraan, waar dan? In het midden? Dan zul je dus een deel van het begin van de string moeten pakken, dan "...", en daarachter een deel van het eind van de string. En dit alles als de totale string groter was dan een bepaalde lengte. Dat moet toch niet zo moeilijk zijn om om te zetten naar code :?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Mocht het nog niet lukken heb ik hier een goeie functie voor je:

PHP:
1
2
3
4
5
6
7
8
<?
function text_chop($text, $length=30) {
    if(strlen($text) > $length) {
        $text = substr($text, 0, $length)."..";
    }
    return $text;
}
?>


Wanneer je dan iets wilt afkorten doe je dus:
PHP:
1
2
3
<?
echo text_chop($mnu_titel, 30);
?>

[ Voor 30% gewijzigd door Verwijderd op 11-05-2004 20:25 ]


Verwijderd

Topicstarter
Verwijderd schreef op 11 mei 2004 @ 20:20:
Pieter,

De functie count_chars telt vanalle bytes (tussen 0 en 255) hoeveel keer een byte voorkomt. Jou foreach loop wordt dus 256 keer doorlopen. Het is dus een hele andere functie, die je niet moet gebruiken voor het tellen van de stringlengte. De code van Sjoerd is de juiste code voor je. En inderdaad het zet drie punten achter de eerste 27 karakters van de titel, precies wat je wilt.
MvdBrink,

De reden dat ik die code niet gebruik, is dat titels van mij mogen zijn zoals zijn. Als ze echter een lenge bereiken van 27 karakters moeten ze afgekapt worden en 3 punten krijgen.

Ik wil dus geen menu vol met puntjes, omdat die met bovenstaande code altijd toegevoegd worden.

En ja ik ben ervan op de hoogte dat ik moeilijk doe ;), maar je hebt van die mensen he?
.oisyn schreef op 11 mei 2004 @ 20:22:
Mag ik vragen waarom je in hemelsnaam een count_chars doet en met foreach alles langs gaat? Waarom gebruik je niet gewoon strlen () ?

En wat probeer je nu te doen? De "..." wil je blijkbaar niet achteraan, waar dan? In het midden? Dan zul je dus een deel van het begin van de string moeten pakken, dan "...", en daarachter een deel van het eind van de string. En dit alles als de totale string groter was dan een bepaalde lengte. Dat moet toch niet zo moeilijk zijn om om te zetten naar code :?
Sorry voor het onbegrip dat ik opwek, maar wat ik bedoel.

Menu item met lengte < 30 = Gebeurt niets
Menu item met lengte > 30 = Afgepakt op 27 tekens en " ..." toegevoegd

Het eerste deel van mijn quest heb ik reeds bereikt met substr, nu het 2de gedeelte nog. Ik dacht dit te doen door de tekens te tellen en PHP de string met "... " te laten verlengen als het aantal tekens groter was dan 27.

De reden dat ik zo stom ben geweest om count_chars te gebruiken is dat ik deze functie uit een ander topic argeloos overgenomen had.

[ Voor 40% gewijzigd door Verwijderd op 11-05-2004 20:28 ]


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:20
Verwijderd schreef op 11 mei 2004 @ 20:01:
Ik heb dit stukje code verzameld/gemaakt om titels in een menu die lang zijn als 30 tekens af te kappen met " ...". Maar ik heb zo het id dat PHP dit teken > niet als "groter dan" ziet zoals ik dat wil.

Hij zou namelijk als die string meer als 27 tekens had de puntjes erachter moeten zetten omdat die dan afgekapt is.

PHP:
1
2
3
4
5
6
7
$mnu_titel = substr($mnu_titel,0,30); 
foreach (count_chars($mnu_titel) as $waarde) { 
    $mnu_titel_lengte = $mnu_lengte + $waarde; 
} 
if ($mnu_titel_lengte > 27) {
    $mnu_titel .= " ...";
}
Het is me een raadsel waarom je hier count_chars voor gebruikt. Die retourneert namelijk een array met alle letters van je string en het aantal keer dat elke letter voorkomt in de string. Vervolgens tel je dit handmatig bij elkaar op om zo de lengte van je string te bepalen.

Waar je echter fout gaat is $mnu_titel_lengte = $mnu_lengte, je bedoelt hier waarschijnlijk $mnu_titel_lengte = $mnu_titel_lengte. Gooi deze methode maar overboord en kijk goed naar de code van Pieter.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 11 mei 2004 @ 20:24:
[...]


MvdBrink,

De reden dat ik die code niet gebruik, is dat titels van mij mogen zijn zoals zijn. Als ze echter een lenge bereiken van 27 karakters moeten ze afgekapt worden en 3 punten krijgen.

Ik wil dus geen menu vol met puntjes, omdat die met bovenstaande code altijd toegevoegd worden.

En ja ik ben ervan op de hoogte dat ik moeilijk doe ;), maar je hebt van die mensen he?
Misschien moet je die code van sjoerdb maar eens uitproberen want die doet dus precies wat je vraagt...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 24-05 12:51

--MeAngry--

aka Qonstrukt

Verwijderd schreef op 11 mei 2004 @ 20:24:
[...]


MvdBrink,

De reden dat ik die code niet gebruik, is dat titels van mij mogen zijn zoals zijn. Als ze echter een lenge bereiken van 27 karakters moeten ze afgekapt worden en 3 punten krijgen.

Ik wil dus geen menu vol met puntjes, omdat die met bovenstaande code altijd toegevoegd worden.

En ja ik ben ervan op de hoogte dat ik moeilijk doe ;), maar je hebt van die mensen he?
Ik wil niet vervelend doen ofzo hoor, maar kijk de code die hierboven gegeven werd door sjoerdb nog eens goed door... 8)7
PHP:
1
2
3
if (strlen($mnu_titel) > 30) {
    $mnu_titel= substr($mnu_titel, 0, 27)."...";
}

Hier worden toch echt alleen maar puntjes neergezet als de string langer dan 30 tekens is. Is dit namelijk het geval, dan worden de eerste 27 gepakt en 3 puntjes toegevoegd. Precies wat jij wilt. ;)

Dit is btw echt te simpel voor woorden, zoiets kun je echt overal vinden. |:(

Tesla Model Y RWD (2024)


Verwijderd

Topicstarter
[quote]NMe84 schreef op 11 mei 2004 @ 20:26:
[...]


Sorry niet geziend dat sjoerd de code aangepast had.

Mijn dank is groot in dat geval.

Namelijk in het originele topic stond een andere code.

[ Voor 64% gewijzigd door Verwijderd op 11-05-2004 20:31 ]


Verwijderd

Probeer die van mij es :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 11 mei 2004 @ 20:24:
Sorry voor het onbegrip dat ik opwek, maar wat ik bedoel.

Menu item met lengte < 30 = Gebeurt niets
Menu item met lengte > 30 = Afgepakt op 27 tekens en " ..." toegevoegd
Dat is toch precies wat de code van sjoerdb doet :? [rml]sjoerdb in "[ PHP] ">" Teken"[/rml]

Jij zegt dat dat niet goed is, want dan komt de "..." er achter (met de string zelf ingekort op 27 tekens). Dat is toch precies wat je wilt?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Dan is het vrij eenvoudig met de code van Pieter. Want als de menu titel groter dan 30 karakters is, dan wordt deze pas aangepast naar 27 karakters + 3 puntjes.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Mja bliep, deze topic had sowieso vanaf het begin af aan al geen bestaansrecht. Pieter, dit forum is niet voor beginners, en je had er makkelijk uit gekomen als je gewoon even logisch had nagedacht en wat meer moeite had gedaan. Met copy&paste werk van anderen kom je nergens

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.