czwartek, 23 stycznia 2014

Moduł Glossify versus Taxonomy tooltip w Drupalu 7

Dostałem ostatnio wymaganie, aby na stronie wykonanej w Drupalu 7 trudne pojęcia i terminy w treści były jakoś specjalnie oznaczone, ich wyjaśnienie pokazywało się w "dymku", a ponadto mają być zebrane wszystkie w jednym miejscu. Tym miejscem miał być tzw. glosariusz.

Aby rozwiązać to zadanie najpierw spróbowałem poszukać gotowego modułu. Natknąłem się na porównanie kilku takich modułów:

https://drupal.org/node/266511

Według mnie interesujące wydawały się:

https://drupal.org/project/lexicon

Zainstalowałem glossify i utworzyłem własną kategorię pojęć (taxonomy) z listą terminów, którą podczepiłem do swojego filtru z edytorem CKEditor. Zadziałało bez problemów. Okazało się jednak, że wyjaśnienia (tooltip'y) są pokazywane za pomocą standardowego atrybutu html title. Moje opisy miały być długie, więc takie rozwiązanie wydało mi się zbyt proste. Odinstalowałem więc glossify i zacząłem szukać czegoś podobnego dalej.

Wreszcie znalazłem inny ciekawy moduł Taxonomy tooltip:
https://drupal.org/project/taxonomy_tooltip
Szczegółowy opis użycia można znaleźć tutaj:
http://webwash.net/tutorials/using-taxonomy-tooltip-module-drupal-7

Od razu mnie ucieszyło, że mogę skorzystać z już wcześniej utworzonej kategorii pojęć.
Ponadto działanie modułu oparte jest na pluginie jQuery o nazwie jQuery Tooltip.
Dymki można więc ostylować i umieścić w nich dużo treści.
Glosariusz można natomiast wykonać za pomocą zwykłych widoków (Views) prezentując odpowiednio kategorię pojęć.

piątek, 3 stycznia 2014

Niepoprawna kolejność komunikatów walidacji podczas rejestracji (Sort before element validation Patch)

Istnieje błąd w Drupalu polegający na tym, że komunikaty po walidacji formularza niekoniecznie są pokazywane w dobrej kolejności. Przykładowo, jeśli w formularzu rejestracji użytkownika dodamy kilka dodatkowych pól i zmienimy ich kolejność wyświetlania to komunikaty walidacji nie będą właściwie posortowane. Niestety jest to błąd rdzenia Drupala (konkretnie w pliku /includes/form.inc) i wymaga zastosowania Patch'a.

Patch: https://qa.drupal.org/pifr/test/388683

Instalacja Patch'a może polegać na prostej edycji pliku form.inc
(przykład ręcznej instalacji innego patcha: http://www.ostraining.com/blog/drupal/patches/)

W pliku form.inc zamieniamy te 2 linijki:

-  // Recurse through all children.
-  foreach (element_children($elements) as $key) {


na tych 6 linijek:

+  // Recurse through all children, sorting the elements so that the order of
+  // error messages displayed to the user matches the order of elements in
+  // the form. Use a copy of $elements so that it is not modified by the
+  // sorting itself.
+  $elements_copy = $elements;
+  foreach (element_children($elements_copy, TRUE) as $key) {


a dalej następuje kod:

     if (isset($elements[$key]) && $elements[$key]) {
       _form_validate($elements[$key], $form_state);
     }

wtorek, 31 grudnia 2013

Przetłumaczenie etykiety Order total w podsumowaniu zamówienia

Żeby było możliwe przetłumaczenie tej etykiety za pomocą standardowej funkcji Drupala Tłumaczenia, to niestety trzeba dopisać odpowiedni hak. Należy odnaleźć plik template.php w katalogu ze skórką naszej strony i dodać taki kod:

function NAZWA_SKORKI_form_alter(&$form, &$form_state, $form_id)

{   

    // Fix order total translation

    if (isset($form['cart_contents']))

    {

        $form['cart_contents']['cart_contents_view']['#markup'] = str_replace('Order total', t('Order total'), $form['cart_contents']['cart_contents_view']['#markup']);

    }

} 

Gdy teraz dodamy tłumaczenie dla tekstu "Order total" to będzie ono efektywne.

poniedziałek, 16 grudnia 2013

Drupal 7: Automatyczne nadanie roli dla nowego konta

W tym celu testowałem dzisiaj moduł Auto Assign Role:

https://drupal.org/project/autoassignrole

Tak wygląda konfiguracja automatycznego ustawiania roli:


Działa to bardzo dobrze. Użytkownik po rejestracji na portalu i pierwszym zalogowaniu się ma od razu nadaną rolę klienta.

poniedziałek, 2 grudnia 2013

Zmiana długości loginu użytkownika w formularzu rejestracji

Aby ograniczyć długość nazwy użytkownika (domyślna: 60) podawanej w formularzu rejestracji należy dopisać hak (ang. hook) np. w naszej skórce. Trzeba znaleźć plik template.php w naszej skórce i na końcu pliku dopisać:

function NAZWA_SKORKI_form_user_register_form_alter(&$form, &$form_state, $form_id)
{
    $form['account']['name']['#maxlength'] = 20;
}

Po odświeżeniu strony z formularzem rejestracji ograniczenie do 20 znaków będzie aktywne.

wtorek, 26 listopada 2013

Drupal Commerce - ostrożnie z własnym kodem PHP

Wstawiłem taki kawałek kodu, aby zrobić przekierowanie:

<?php
 /* This will give an error. Note the output
  * above, which is before the header() call */
 

header('Location: http://www.example.com/');
exit;
 

?>

Drupal zaczął bardzo dziwnie się zachowywać. Długo mi zeszło zanim się zorientowałem, że to właśnie ten fragment kodu psuje aplikację...

sobota, 23 listopada 2013

Niewidoczne pole (custom field) podczas tworzenia Pricing rule dla custom Line item type

Dodawanie reguły wyliczania ceny pokazuje bardzo fajny screencast:

http://www.drupalcommerce.org/videos/tutorials/customizable-products-pizza-store

Wydawało mi się, że robię wszystko jak na tym filmiku, ale u mnie wciąż nie pojawiało się pole (custom field) z mojego line item type w selektorach. Okazuje się, że przeoczyłem jeden ważny krok w tym tutorialu. Nowe pole we własnym line item type musi mieć koniecznie typ "Odnośnik do terminu". Musimy utworzyć w kategoriach (taxonomy) słownik z parametrami, które będą wyświetlane w formatce "Add to Cart". Nie możemy wybrać innego typu, np. Lista (numeryczna) itp. To jest ograniczenie Drupal Commerce, które pewnie w przyszłości będzie poprawione.