Ahogy a képen is látszik, az ilyen szövegek formázása nem túl egyszerű. Bármikor jól jöhet, hogyha egy címnél például az első 3 karakternek más-más háttér kell, vagy egyéb hasonlóan cudar manővereket pakolt a grafikába a designer.
Ez a kis sminkfüggvény egy modulba, vagy a template.php-be megkönnyíti a munkát, feldarabolja, classolja a létrehozott spanokat, így már lehet célozni css-ben.
Használata, ha mondjuk egy block címét akarjuk felspanolni, akkor a block.tpl.php-ba cseréljük le:
<h2 class="title"><?php print $title; ?></h2>
erre:
<h2 class="title"><?php if ($title != '<none>') : print theme_fragmented_string($title, $ide_amilyen_class_nevet_akarsz_a_spanoknak, TRUE); endif; //a végén a TRUE akkor kell, ha sorszámozni szeretnéd a class-okat?></h2>
És ilyen html-t kapunk:
<h2 class="title"><span class="fragmented fragmented-1 fragmented-1">1</span><span class="fragmented fragmented-2 fragmented-0">0</span><span class="fragmented fragmented-3 fragmented-8">8</span></h2>
És a sminkfüggvény, csak másold be a template.php-ba:
/* * Theme function to separate string into different <span>'s * * @param $string * The string need to divide * @param $class * The class name in <span class="$class"> * @param $count * If TRUE, in <span class "$class"> will be one more class with counter. * @return * The separeted string. */ function theme_fragmented_string($string, $class = 'fragmented', $count = FALSE) { $output = ''; $string_array = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY); $counter = 1; $classes = $class; foreach ($string_array as $key => $value) { if ($count) { $classes .= ' ' . $classes . '-' . $counter; } $classes .= ' fragmented-' . $value; $output .= '<span class="' . $classes .'">' . $value . '</span>'; $counter++; $classes = $class; } return $output; }
És végül köszönet Sweetchucknak, aki segített a preg_splitet összehozni.
Ja, és azért értelemszerűen 100+ karakteres szövegre nem biztos, hogy ezt kell használni.

Hozzászólások
Észrevettem hogy kiírja azon
Észrevettem hogy kiírja azon blokkok nevét is ahol azt írtam be hogy látható címnek hogy
<none>.erre van bármi megoldásod?
Én az általad írt $theme_fragmented_text-et a template.php-ban theme_fragmented_string-re, mer különben azt mondta hogy "Fatal error: Call to undefined function theme_fragmented_string", úgy működött, csak a fent jelzett kis hibával együtt sajnos :)
Aham, jogos. Javítottam
Aham, jogos.
Javítottam mindkettőt.
Én nem block_title-re használtam, valószínű, hogy a cím képzésénél a
<none>-t a megjelenítésnél szűri ki, így ha az közben átalakul, akkor nem működik.Hozzászólás