Stringek darabolása, előkészítése css formázáshoz

Kategória: 
Snippet
Stringek darabolása, előkészítése css formázáshoz

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

A mező tartalma nem nyilvános.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Engedélyezett HTML elemek: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • A webcímek és email címek automatikusan linkekké alakulnak.
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.
  • Engedélyezett HTML elemek: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Minden email cím át lesz alakítva ember által olvasható módon, vagy (ha a JavaScript engedélyezett) ki lesz cserélve kattintható, de biztonságos hivatkozásra.
By submitting this form, you accept the Mollom privacy policy.