WordPress: Αλλαγή γραμμής στο βιογραφικό του συντάκτη

Ίσως να έχετε διαβάσει για ένα πρόβλημα που είχα συναντήσει όταν είχα φτιάξει μια σελίδα για τη σύζυγό μου. Στο παρών άρθρο θα αναφερθώ σε ένα άλλο πρόβλημα που συνάντησα φτιάχνοντας μια καινούρια σελίδα, ξανά για τη διαιτολόγο σύζυγό μου.

Θα έχετε παρατηρήσει σε πολλές σελίδες ότι (συνήθως) κάτω από ένα άρθρο αναφέρεται ο συντάκτης μαζί με ένα σύντομο βιογραφικό ή τέλος πάντων κάποιου είδους περιγραφή. Σε σελίδες που έχουν φτιαχτεί με τη χρήση του WordPress το κείμενο αυτό προέρχεται από το πεδίο Βιογραφικά στοιχεία που βρίσκεται στο Προφίλ του χρήστη/συντάκτη.

Βιογραφικά στοιχεία
Βιογραφικά στοιχεία

Το πρόβλημα

Όσες φορές και να πατήσουμε Enter για να αλλάξουμε γραμμή μέσα σε αυτό το πεδίο, όταν αυτό θα μετατραπεί σε html οι αλλαγές γραμμής θα εξαφανιστούν. Το ίδιο θα συμβεί αν αφήσουμε πολλά συνεχόμενα κενά (θα μετατραπούν σε ένα) ή αν πατήσουμε tab.

Για να αλλάξουμε γραμμή σε html θα έπρεπε να χρησιμοποιήσουμε το tag “<br />”. Όμως, ακόμα και αν γεμίσουμε το πεδίο με <br /> δε πρόκειται να δούμε να αλλάζουν οι γραμμές.

Αυτό συμβαίνει, γιατί η συνάρτηση του Worpdress που χρησιμοποιείται συνήθως από τα θέματα (themes) για να δείξει αυτά τα στοιχεία, είναι η the_author_meta  (με όρισμα description), η οποία τυπώνει τα περιεχόμενα του προαναφερθέν πεδίου. Υπάρχει όμως ένα προβληματάκι!  Η συγκεκριμένη συνάρτηση για λόγους ασφαλείας καθαρίζει τα δεδομένα (sanitize) από html tags, με αποτέλεσμα ότι γράψουμε μέσα στο παραπάνω πεδίο να βγει όλο σε μια γραμμή!

Η λύση(;)

Μια λύση είναι απλά να αποδεχτούμε το γεγονός ότι τα πάντα θα βγούν σε μια γραμμή. Συχνά αυτό όμως δεν είναι και πολύ όμορφο.

Αν θέλουμε λοιπόν να έχουμε αλλαγές γραμμών, η λύση είναι να χρησιμοποιήσουμε τη συνάρτηση nl2br της PHP, η οποία μετατρέπει όσες αλλαγές γραμμής βρει σε ένα κείμενο σε <br /> tags της html.

Έτσι, θα πρέπει να ψάξουμε στο κώδικα από το θέμα μας που υπάρχει μια γραμμή σαν τη παρακάτω:

<?php the_author_meta('description'); ?>
.

Επειδή η the_author_meta δεν επιστρέφει τη τιμή του πεδίου αλλά την τυπώνει, θα πρέπει να την αντικαταστήσουμε με την get_the_author_meta που μας επιστρέφει την τιμή. Αυτή θα πρέπει να την περάσουμε μέσα από την nl2br και να τυπώσουμε το αποτέλεσμα (με την echo). Δηλαδή η παραπάνω γραμμή θα γίνει κάπως έτσι:

<?php echo nl2br(get_the_author_meta('description')); ?>
.

Μια καλή περιγραφή μπορείτε να βρείτε και εδώ.

Παρενέργειες

Βέβαια θα πρέπει να έχουμε υπόψη μας ότι αν ενημερώσουμε το θέμα μας σε μια πιο καινούρια έκδοση είναι πολύ πιθανόν να χαθούν οι αλλαγές μας και να πρέπει να τις ξανακάνουμε.

Επίσης, κάτι που συνέβη σε μένα μετά από κάποια ενημέρωση του θέματος, είναι αλλάζοντας τη παραπάνω γραμμή στο θέμα, για κάποιο λόγο που δεν αναζήτησα παραπέρα, να “χαλάσει” η εμφάνιση του θέματος (κάποιο θέμα με το CSS πιθανόν) και να αναγκαστώ να αφήσω να βγαίνει η περιγραφή σε μια γραμμή τελικά. 🙁

RoR – Επιτάχυνση των tests

Όταν τρέχουμε τα tests μας, χρειάζονται κάποια δευτερόλεπτα ώστε αυτά να ξεκινήσουν να τρέχουν (τουλάχιστον αυτό συμβαίνει όταν χρησιμοποιούμε RSpec). Ο λόγος είναι ότι για να τρέξουν τα tests χρειάζεται να φορτωθεί στη μνήμη ολόκληρη η εφαρμογή μας.

Χρησιμοποιώντας το Spork

Ένας τρόπος να επιταχύνουμε αυτή τη διαδικασία είναι με τη χρήση του Spork. Για να χρησιμοποιήσουμε το Spork θα πρέπει να φορτώσουμε τα κατάλληλα gems στο gemfile μας.

group :development, :test do
  ...
  gem 'spork-rails'
end

Χρησιμοποιούμε το gem ‘spork-rails’ αντί του ‘spork’, γιατί ενώ το Spork υποστηρίζει διάφορα frameworks, η υποστήριξη για Rails αφαιρέθηκε.

Στη συνέχεια τρέχουμε:

bundle install
bundle exec spork --bootstrap

Πριν συνεχίσουμε θα πρέπει να φτιάξουμε τα configuration αρχεία. Για παράδειγμα, αν χρησιμοποιείτε RSpec ως test framework, στο αρχείο /spec/spec_helper.rb θα έχουν προστεθεί αυτόματα 2 block από το Spork. Θα πρέπει να μοιράσουμε τα προυπάρχοντα settings του αρχείου σε αυτά τα 2 blocks. Το πιο εύκολο είναι να τα βάλουμε μέσα στο block Spork.prefork.

Τέλος, για να ολοκληρώσουμε θα πρέπει να τρέξουμε την εντολή ‘spork’. Πριν την τρέξουμε όμως μπορούμε αν θέλουμε να χρονομετρήσουμε τα tests μας για να δούμε τη διαφορά. Για να χρονομετρήσουμε χρησιμοποιούμε την εντολή time, π.χ. ‘time bundle exec rspec’. Αφού ξεκινήσουμε το Spork, μπορούμε να ξανατρέξουμε τα tests και να δούμε πόσο πιο γρήγορα είναι.

Guard και Spork μαζί

Αν χρησιμοποιούμε το Guard για αυτοματοποίηση των tests, τότε για να συνεργαστούν Guard και Spork θα πρέπει να προσθέσουμε άλλο ένα gem.

gem 'guard-spork'

Στη συνέχεια τρέχουμε:

bundle install
bundle exec guard init spork

Αυτό θα προσθέσει κάποια πράγματα στο Guardfile, που αν θέλουμε μπορούμε να τροποποιήσουμε (π.χ. να βάλουμε να ξεκινάει το Spork αυτόματα όταν θα ξεκινάμε το Guard).

Έτσι, έχοντας Guard και Spork εγκατεστημένα μπορούμε να βελτιώσουμε και να επιταχύνουμε το περιβάλλον ανάπτυξής μας, αλλά και ουσιαστικά να κάνουμε τη χρήση tests πιο εύκολη.

RoR – Αυτοματοποίηση των tests

Αν θέλουμε να αποφύγουμε, κάθε φορά που θέλουμε να τρέξουμε τη σουίτα των tests μας, να γυρίζουμε σε γραμμή εντολών, μπορούμε να το γλιτώσουμε με τη βοήθεια του “Guard“. Το Guard έχει την δυνατότητα όχι μόνο να τρέχει αυτόματα τα tests μας κάθε φορά που κάνουμε κάποια αλλαγή σε ένα αρχείο, αλλά και να τρέχει μόνο εκείνα τα tests που αντιστοιχούν στον αλλαγμένο κώδικά μας.

Αρχικά πρέπει να προσθέσουμε στο Gemfile το κατάλληλο gem. Θεωρώντας ότι χρησιμοποιούμε RSpec αντί Test::Unit προσθέτουμε το ‘guard-rspec’ (αλλιώς σκέτο ‘guard’) στο group ‘development’:

group :development do
  gem 'guard-rspec'
end

Σύμφωνα με το Rails Tutorial, πρέπει επίσης να προσθέσουμε κάποια ακόμα gems κάτω από το group ‘test’, ανάλογα με το λειτουργικό μας. Εφόσον χρησιμοποιούμε Rails 4 (για παλιότερες εκδόσεις είναι λίγο διαφορετικά) προσθέτουμε:

  • Σε Linux:
    group :test do
      gem 'libnotify'
    end
    
  • Σε Windows:
    group :test do
      gem 'rb-notifu'
      gem 'win32console'
      gem 'wdm'
    end
    
  • Σε OS X:
    group :test do
      gem 'growl'
    end
    

Στη συνέχεια τρέχουμε:


bundle install
bundle exec guard init rspec

Μπορούμε αν θέλουμε να τροποποιήσουμε το παραγόμενο ‘Guardfile’. Για να μην τρέχουν όλα τα tests κάθε φορά μπορούμε να προσθέσουμε (πάντα στη περίπτωση που χρησιμοποιούμε  RSpec αντί Test::Unit):

guard 'rspec', all_after_pass: false do
...
end

Εν τέλει τρέχουμε:


bundle exec guard

Έτοιμοι!

text-transform:uppercase, πρόβλημα με τους τόνους στα κεφαλαία

Πριν μερικούς μήνες έφτιαξα μια ιστοσελίδα για τη γυναίκα μου, που είναι διαιτολόγος.

Ως χρήστης του firefox ανέπτυξα τη σελίδα σε αυτόν και εκ των υστέρων την έλεγξα και με άλλους browsers (π.χ. chrome, opera κτλ.). Τότε παρατήρησα κάτι περίεργο.

Το πρόβλημα

Στην κορυφή της σελίδας υπάρχει ένα μενού “πλοήγησης” όπου υπάρχουν σύνδεσμοι στις διάφορες σελίδες του ιστότοπου. Το μενού είναι με κεφαλαία και ενώ στον firefox όλα ήταν φυσιολογικά στους υπόλοιπους browsers είχε τόνους στα κεφαλαία γράμματα.

Οι σύνδεσμοι όπως εμφανίζονται στον firefox
Οι σύνδεσμοι όπως εμφανίζονται στον firefox
Οι σύνδεσμοι όπως εμφανίζονται στους υπόλοιπους browsers
Οι σύνδεσμοι όπως εμφανίζονται στους υπόλοιπους browsers

Αρχικά δεν ήξερα τι συμβαίνει. Ωστόσο ψάχνοντας κατέληξα στον “φταίχτη”. Ήταν η εντολή text-transform:uppercase που είχα στο CSS. Το theme που χρησιμοποιούσα με αυτό τον τρόπο μετατρέπει τις ονομασίες των σελίδων που έχουν καταχωρηθεί με μικρά σε κεφαλαία για χρήση στο μενού πλοήγησης που υπάρχει στη κορυφή της σελίδας.

Γιατί όμως στο firefox ήταν χωρίς τόνους ενώ στους άλλους browsers ήταν με τόνους; Μετά από ψάξιμο έπεσα πάνω σε αυτό το πολύ αναλυτικό και επεξηγηματικό άρθρο. Φαίνεται πως ο firefox είναι ο πρώτος browser (και από ότι φαίνεται μοναδικός) που τηρεί τους κανόνες του ελληνικού τονισμού όταν εκτελεί τις εντολές text-transform:uppercase και font-variant:small-caps της γλώσσας CSS.

Η λύση;

Σύμφωνα με το συντάκτη του προαναφερθέν άρθρου η λύση είναι να μη χρησιμοποιούμε καθόλου την εντολή text-transform:uppercase στα ελληνικά (και όχι μόνο, αν κατάλαβα καλά). Άλλες λύσεις προτείνουν τη χρήση κάποιου script για τη σωστή μετατροπή σε κεφαλαία.

Εγώ προς το παρών δεν έχω αποφασίσει τι να κάνω και κατέληξα να έχω αφήσει τη σελίδα όπως είναι, με τους τόνους.

Εσείς τι τεχνική ακολουθείτε για να μετατρέπετε σε κεφαλαία, σε συγκεκριμένα σημεία στη σελίδα, λέξεις που αρχικά είναι γραμμένες με μικρά;

RoR – Χρήση RSpec αντί Test::Unit

Αν θέλετε σε ένα καινούριο project με Ruby on Rails να χρησιμοποιήσετε ως testing framework το RSpec αντί του Test::Unit μπορείτε κατά τη δημιουργία απλά να πληκτρολογήσετε:


rails new my_app --skip-test-unit

Σε αυτή την περίπτωση δε θα δημιουργηθεί ο φάκελος ‘test’. Αν έχετε ήδη δημιουργήσει ένα project μπορείτε βέβαια να σβήσετε το φάκελο ‘test’ (προσοχή μη χάσετε υπάρχοντα tests). Στη συνέχεια χρειάζεται να προσθέσουμε στο Gemfile στο group ‘development’ και ‘test’ το εξής:


gem 'rspec-rails'

Μετά τρέχουμε διαδοχικά:


bundle install
rails generate rspec:install

Είμαστε πλέον έτοιμοι!