Obrazki + listy definicji + Drupal

Artykuł został zaktualizowany dla wersji 5.x-1.4 modułu Image.

Na łamach letwist pisałem już o wstawianiu grafik przy pomocy list definicji. Teraz opiszę jak „wdrożyć” ten pomysł do Drupala. Trzy podstawowe zalety tej modyfikacji to:

  • brak konieczności wprowadzania znaczników ręcznie
  • rozwiązanie problemu z walidacją kodu
  • rozwiązanie problemu z Internet Explorerem

Modyfikacja wykorzystuje moduł image_attach, który umożliwia wstawianie grafik bezpośrednio z formularza dodawania zawartości, oraz szablon PHPTemplate.

Problem z walidacją polegał na nieprawidłowym traktowaniu list definicji przez wbudowany w Drupala filtr „Konwerter znaków końca linii”, który co prawda można było wyłączyć, ale jest on dla odwiedzających stronę rzeczą raczej niezbędną.

Po zainstalowaniu modułu Image, wraz z modułem image_attach, otwieramy (lub tworzymy – jeśli jeszcze nie istnieje) szablon template.php naszej skórki opartej o silnik PHPTemplate i wklejamy co następuje:

function phptemplate_image_attach_teaser($node) {
  $img_size = variable_get('image_attach_size_teaser_'. $node->type, 'thumbnail');

  if ($img_size != IMAGE_ATTACH_HIDDEN) {
    drupal_add_css(drupal_get_path('module', 'image_attach') .'/image_attach.css');

    $image = node_load($node->iid);
    $info = image_get_info(file_create_path($image->images[$img_size]));

    $output .= '<dl class="image right">';
    $output .= '<dt>';
    $output .= l(image_display($image, $img_size), "node/$node->nid", array(), NULL, NULL, FALSE, TRUE);
    $output .= '</dt>';
    $output .= '<dd>'. $image->title .'</dd>';
    $output .= '</dl>'."\n";

    return $output;
  }
}

function phptemplate_image_attach_body($node) {
  $img_size = variable_get('image_attach_size_body_'. $node->type, IMAGE_THUMBNAIL);

  if ($img_size != IMAGE_ATTACH_HIDDEN) {
    drupal_add_css(drupal_get_path('module', 'image_attach') .'/image_attach.css');

    $image = node_load($node->iid);
    $info = image_get_info(file_create_path($image->images[$img_size]));

    $output .= '<dl class="image">';
    $output .= '<dt>';
    $output .= l(image_display($image, $img_size), "node/$node->nid", array(), NULL, NULL, FALSE, TRUE);
    $output .= '</dt>';
    $output .= '<dd>'. $image->title .'</dd>';
    $output .= '</dl>'."\n";

    return $output;
  }
}

Następnie do naszego arkusza stylów dodajemy:

dl.image {
        float: right;
        margin: 2px 0 2px 10px;
        padding: 6px;
        background-color: #EEE;
        color: inherit;
        border: 1px solid #BBB;
        text-align: center;
        }
dl.image dt {
        font-weight: bold;
        }
dl.image dt img {
        border: 1px solid #666;
        }
dl.image dd {
        margin: 0 auto;
        font-size: .8em;
        }

Voila! Pięknie ostylowane obrazki bezpośrednio z Drupala.

Sposób wyświetlania odpowiedzi

Wybierz preferowany sposób wyświetlania odpowiedzi i kliknij "Zachowaj ustawienia", by wprowadzić zmiany.

"Dziękujemy Ci Letwist" :).

„Dziękujemy Ci Letwist” :). Znowu mnie Drupal zaskoczył, ile razy jeszcze?

Portret użytkownika zoltan_lm

dla zielonych ...

Witajcie,

Powiedzmy, że interesuje mnie dodawanie zdjęć „z automatu” do drupalowych wpisów.

Zainstalowałem moduły o których mowa, czyli [image_attach,mo­dułu image].

I chcę, by dodawana fotka umieszczona była po prawej stronie tekstu wpisu zgodnie z definicjami o których traktuje ten art.

Jakoże programistą nie jestem, nie przebrnąłem do końca, by tak właśnie się stało toteż prosze o pomoc i wyrozumiałość :)

Niby zrobiłem to co jest opisane, ale obrazki wyświetlają się tak samo jak na początku.

Co zrobiłem ?

  1. skopiowałem katalog skórki blumarine do nowego kat. newname_marine
  2. dodałem do katalogu plik template.php z ww. zawartością
  3. dodałem do style.css katalogu newname_marine ww. zawrtość arkusza stylów
  4. powrzucałem to na serw. zmieniłem skórę, dodałem obrazek
  5. obrazek wciąż pokazuje się, tak jak na początku, bez zmian.

Gdzie robię błąd ? Dziękuję i pozdrawiam społeczność letwist / drupal :)

Zastosu j to

Zastosuj to:

Ładny obrazek
Obrazek w ramce
Super obrazki nie są złe

Pozdrawiam

Portret użytkownika GlobalPlayer

ale przeciez modul image w

ale przeciez modul image w sklad ktorego wchodzi modul image_attach ma swoj plik css w katalogu z tym modulem image_attach.css i wystarczy wyedytowac ten plik, zeby zmienic pozycje wyswietlania obrazka :)

Portret użytkownika archetwist

Pytanie dotyczyło

moderator

Pytanie dotyczyło zmodyfikowanej wersji modułu, o czym traktował ten artykuł. Reguły z arkusza załączonego do modułu nie wystarczą.

design www drupal