Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από ManosApp » 15 Σεπ 2014 17:57

Με αυτό τον κομμάτι κώδικα,

Κώδικας: Επιλογή όλων

$convert = preg_replace&#40;'~<a&#40;?=&#91;^>&#93;+>\s*<img&#41;~','<a rel="lightbox"',$convert&#41;;
μπορώ να προσθέσω στο a tag <a href="" εδώ ></a> σε κάθε υπερσυνδεμένης εικόνας την παράμετρο rel="lightbox". Με τον τρόπο αυτό κάθε img tag μέσα στο a tag έχει το εφφέ του lightbox, το γνωστό script.

Έτσι κάθε,

Κώδικας: Επιλογή όλων

<a href=""><img src="" /></a>
γίνεται,

Κώδικας: Επιλογή όλων

<a rel="lightbox" href=""><img src="" /></a>
Ως εδώ μια χαρά !

Όμως τι γίνεται αν θέλω να εξαιρέσω ορισμένες εικόνες από αυτόν τον κανόνα που μόλις σας έδειξα ; Ας πούμε ότι για 2-3 φωτογραφίες δεν θέλω να ισχύει ο παραπάνω κανόνας και να μην εφαρμόζεται η προσθήκη της παραμέτρου rel="lightbox" .

Σκέφτηκα ότι μια λύση θα ήταν στα a tags των 2-3 φωτογραφιών αυτών να πρόσθετα ένα class="nothis" αλλά μετά με βάση τον αρχικό κώδικα που χρησιμοποιώ πως θα έπρεπε να τον αλλάξω έτσι ώστε όταν συναντάει ο κώδικας το class="nothis" να μην του προσθέτει την παράμετρο rel="lightbox" ;

Δηλαδή όπου θα υπάρχει,

Κώδικας: Επιλογή όλων

<a href="" class="nothis"><img src="" /></a>
να μην γίνεται προστίθεται το rel="lightbox" στο a tag και να παραμένει ανέγγιχτο,

Κώδικας: Επιλογή όλων

<a href="" class="nothis"><img src="" /></a>
χμ ;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από geomagas » 15 Σεπ 2014 20:31

Θέλεις οπωσδήποτε να το κάνεις με regex;

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από ManosApp » 15 Σεπ 2014 20:59

Θα ήθελα να δώ-καταλάβω πως αλλάζει το regex όταν θέλω να πετύχω αυτό που περιέγραψα αλλά αν υπάρχει και άλλος τρόπος με τον οποίον μπορούμε να το πετύχουμε ευχαρίστως να τον δούμε.

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από ManosApp » 16 Σεπ 2014 22:34

Βλέπω δεν απάντησε κανείς μήπως είναι δύσκολο να γίνει αυτό που περιέγραψα με regex ;

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από geomagas » 17 Σεπ 2014 00:21

Sorry που σε "παράτησα", αλλά δεν είχα το χρόνο...

Γενικά, αν θέλεις να διαχειριστείς το DOM, είναι πιο εύκολο με DOMDocument και XPath. Για το θέμα σου πχ, θα έκανες κάτι τέτοιο:

Κώδικας: Επιλογή όλων

$d=new DOMDocument&#40;&#41;;
libxml_use_internal_errors&#40;true&#41;;
$d->loadHTML&#40;$convert&#41;;
libxml_use_internal_errors&#40;false&#41;;
$xpath=new DOMXpath&#40;$d&#41;;
$imglinks=$xpath->query&#40;"//a&#91;img&#93;"&#41;;
foreach&#40;$imglinks as $el&#41;
  &#123;
  $classes=explode&#40;' ',$el->getAttribute&#40;'class'&#41;&#41;;
  if&#40;!in_array&#40;'nothis',$classes&#41;&#41; $el->setAttribute&#40;'rel','lightbox'&#41;;
  &#125;
// .......
// some more processing
// .......
echo $d->saveHTML&#40;&#41;;
Ντάξει, μπορεί να είναι παραπάνω κώδικας και να χρειάζεται να μάθεις τα xpath queries, αλλά (1) είναι πιο σαφές και διαχειρίσιμο και (2) τα xpath queries δεν είναι τόσο "γλωσσοδέτες" όσο τα regexen.

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από ManosApp » 17 Σεπ 2014 11:24

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

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

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από alou » 17 Σεπ 2014 11:44

Δεν είναι (νομίζω) γιατί το σενάριο γίνεται πιο πολύπλοκο και πρέπει να παίξεις (και) με λέξη, δες regex με ?!\bleksi\b (όχι τη leksi) αλλά και με χαρακτήρες που δέχεσαι (όπως είχες το ^> που σημαίνει τα πάντα εκτός > αλλά τώρα δεν ισχύει). Είναι μπέρδεμα.

Αν βάλεις στο παιχνίδι ότι αυτή η λέξη πιθανώς να υπάρχει σε ένα href attribute, το ξεχνάς γιατί μετά θα πρέπει να πάρεις ακριβώς το class="leksi" αποκλείοντας να έχει και άλλο class μέσα.

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

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27647
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από cordis » 17 Σεπ 2014 12:08

Αυτο θες να γίνει one off για να αλλαξεις καποια html που εχεις; ή θα γίνετε κάθε φορά που έρχεται ένα request;
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από ManosApp » 17 Σεπ 2014 12:15

Alou δύσκολο ε ; μην νομίζεις δεν ξέρω και πολλά πάνω στα regex, cordis όχι δεν πρόκειται για request αν καταλαβαίνω σωστά, απλά όπου μέσα στη σελίδα υπάρχει <a href="" class="nothis"<img src="" alt="" title="" border="0" ></a> όποτε μάλλον το πρώτο που ανέφερες.

Πρόκειται για μια σελίδα μόνο.

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από alou » 17 Σεπ 2014 13:48

Καταρχάς η χρήση του domdocument είναι η πιο σωστή για τέτοια θέματα και ανεξάρτητα από αυτό, μελέτησε αυτό που σου είπε ο geomagas.

Από εκεί και πέρα, δεν ξέρω τι ακριβώς παίζει με τη σελίδα αλλά είναι πολυ εύκολο να γίνει αυτό που θες με javascript (να αφαιρέσεις το rel="lightbox" όταν υπάρχει κάποιο class name). Και αφού μιλάμε για js-related attribute (lightbox), δεν βρίσκω το λόγο να παιδεύεσαι παραπάνω.

(jQuery)

Κώδικας: Επιλογή όλων

var nolightbox = $&#40;'a.nothis'&#41;;
nolightbox.removeAttr&#40;'rel'&#41;;

ManosApp
Δημοσιεύσεις: 48
Εγγραφή: 19 Ιούλ 2013 22:34

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από ManosApp » 17 Σεπ 2014 19:12

Alou σε ποιο documentation αναφέρεσε, ποιάς γλώσσας javascript, php ;

Tο DOM θέλει διάβασμα δεν έχω ιδέα ακόμα και όταν το δοκίμασα είχα κάποια erros πχ μου έκανε echo στο source code της σελίδας το DOCTYPE ξανά στο σημείο όπου πρόσθεσα τον κώδικα και υπήρξε ένα χάος από άποψη εγκυρότητας του html κώδικα.

Να σου ξεκαθαρίσω ότι προγραμματισμό ότι ξέρω το έμαθα από το διαδίκτυο δεν έχω τις δικές σου γνώσεις σε καμία περίπτωση.

Ενδιαφέρουσα και η λύση με javascript αλλά ζήτησα με php.

Ρωτώντας και αλλού στο διαδίκτυο και γενικά ψάχνοντας η λύση είναι αυτή, την παραθέτω σε περίπτωση που και κάποιος άλλος έχει τη δικιά μου απορία να μην μείνει αναπάντητη :

Αντί για,

Κώδικας: Επιλογή όλων

<a&#40;?=&#91;^>&#93;+>\s*<img&#41;
γράφουμε,

Κώδικας: Επιλογή όλων

<a&#40;?=&#40;?&#58;&#40;?!class="nothis"&#41;&#91;^>&#93;&#41;+>\s*<img&#41;

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27647
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από cordis » 17 Σεπ 2014 21:59

Dom document λέει, οχι documentation. :)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Προσθήκη rel="lightbox" σε κάθε a tag εκτός εκείνων με class="nothis"

Δημοσίευση από alou » 18 Σεπ 2014 11:29

@ManosApp, αν αποκλείεις την περίπτωση να υπάρχει και άλλο class καλύπτεσαι, από την άλλη αν ελέγχεις απόλυτα τα class names δεν καταλαβαίνω γιατί δεν έχεις βάλει διαφορετικά και το rel attribute.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες