jQuery: functie uitbreiden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eddy E

Eddy E

27/12/2014 14:50:42
Quote Anchor link
Ik ben vanaf vanmiddag bezig met phpBB 3.1, welke op Symphony is gebouwd.

Leuk een aardig: de eerste extensie komt er aan.
Preview van geuploade afbeeldingen.


Nu heb ik de HTML al klaar.
De CSS was een makkie.
Maar de jQuery is (vind ik) lastiger:

Ik heb nu deze functie aangepast:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * Update the relevant elements and hidden data for an attachment.
 *
 * @param int index    The index from phpbb.plupload.ids of the attachment to edit.
 * @param array downloadUrl    Optional array of download urls to update.
 * @return undefined
 */
phpbb.plupload.updateRow = function(index, downloadUrl) {
    var attach = phpbb.plupload.data[index],
        row = $('[data-attach-id="' + attach.attach_id + '"]');

    // Add the link to the file
    if (typeof downloadUrl !== 'undefined' && typeof downloadUrl[index] !== 'undefined') {
        var url = downloadUrl[index].replace('&', '&'),
            
        link = $('<a></a>');
        link.attr('href', url).html(attach.real_filename);
        row.find('.file-name').html(link);
    }

    /* eddy */
    row.find('.previewupload').attr('src', url);
    
    row.find('textarea').attr('name', 'comment_list[' + index + ']');
    phpbb.plupload.updateHiddenData(row, attach, index);
};


De enige EXTRA code is hetgeen wat onder /* Eddy */ staat.
Dat is al.

Maar ik wil deze functie niet aanpassen.
Ik wil in een (nieuw) bestand deze functie uitbreiden, zodanig dat mijn regel (die van onder /* eddy */) er aan toe wordt gevoegd.
De volgorde maakt niet uit, hij mag ook al aller laatste.


HOE?

Toevoeging op 27/12/2014 16:20:47:

Kan mij iemand vertellen wat voor functie dit eigenlijk is?
Is het een Widget?
Wat is 'phpbb' in deze naamstelling? Is het een NAMESPACE?
Wat is .updateRow? Want die wordt in mijn editor een andere kleur gegeven dan phpbb.plupload.

En vooral: hoe voeg ik mijn regel toe ZONDER de functie hierboven aan te passen?
Ook het aanroepen van een andere functie (ipv phpbb.plupload.updateRow) is niet mogelijk.
Het moet extern (ander bestand) uitgebreid worden.
 
PHP hulp

PHP hulp

28/11/2024 09:51:33
 
Wouter J

Wouter J

27/12/2014 16:49:05
Quote Anchor link
>> Wat is 'phpbb' in deze naamstelling? Is het een NAMESPACE?

phpbb is een object:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
var phpbb = {};

Bron: https://github.com/phpbb/phpbb/blob/040d451dcca9ae54d8f4b7bdd2f231033765a8f2/phpBB/assets/javascript/core.js#L1

>> Wat is .updateRow? Want die wordt in mijn editor een andere kleur gegeven dan phpbb.plupload.

plupload is een property van phpbb (die trouwens ongedefinieerd is in PHPbb). updateRow is weer een property van deze property en deze bevat een functie. Je kan het dus zien als de method van de phpbb.plupload class.




Terug naar je vraag. Je zou de originele functie kunnen kopieren naar een andere property en dan deze property kunnen overschrijven met je eigen functie, die weer de oude functie aanroept + de custom code. Zoiets:
Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
phpbb.plupload._updateRow = phpbb.plupload.updateRow;
phpbb.plupload.updateRow = function (index, downloadUrl) {
    phpbb.plupload._updateRow(index, downloadUrl); // de methods zijn static en niet gebonden aan de prototype, dus geen this._updateRow() gebruiken!

    var row = $('[data-attach-id="' + attach.attach_id + '"]');
    var url = row.find('.file-name a').attr('href');

    row.find('.previewupload').attr('src', url);
};
 
Eddy E

Eddy E

27/12/2014 18:08:03
Quote Anchor link
A-ba-ca-da-bra....

Maar eigenlijk kopieer je eerst de oude.
Je maakt een nieuwe (ipv de oude)
Je roept in de nieuwe de oude aan.
Klinkt redelijk logisch.

Top!
Nu nog eens uitvogelen hoe ik via een extensie zelf een template (HTML) kan gebruiken.
Bestand is al klaar, maar hij doet er niets mee.
En dan is het voor mij toch lastiger zoeken dan producerele PHP-code.
Gewijzigd op 28/12/2014 13:19:09 door Eddy E
 
Eddy E

Eddy E

02/01/2015 13:18:13
Quote Anchor link
Ik kom hier even op terug: de functie die Wouter J gaf doet wel wat het moet doen, maar alleen als ik de orginele functie echt wegggooi.
Als ik deze later toevoegd (in de footer), dan wordt deze niet uitgevoerd. Ook een alert('Hoi'); komt dan niet door.


Hoe zorg ik er voor dat deze functie (achteraf!) de eerder geschreven functie echt vervangt?

Toevoeging op 02/01/2015 13:25:35:

Als ik dit script gebruik, krijg ik alleen de "1" in de alert te zien.
De "2" dus niet.

Iemand een oplossing?

Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<script>
alert("1");
phpbb.plupload._updateRow = phpbb.plupload.updateRow;
phpbb.plupload.updateRow = function (index, downloadUrl) {
    alert("2");
    phpbb.plupload._updateRow(index, downloadUrl); // de methods zijn static en niet gebonden aan de prototype, dus geen this._updateRow() gebruiken!

    var row = $('[data-attach-id="' + attach.attach_id + '"]');
    var url = row.find('.file-name a').attr('href');

    row.find('.previewupload').attr('src', url);
};
</
script>



Toevoeging op 02/01/2015 13:27:38:

Online voorbeeld: http://zunflappie.nl/phpbb31/posting.php?mode=reply&f=2&t=1

Toevoeging op 02/01/2015 13:33:26:

Nog specifieker:

Code (js)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<script>
alert("1");


phpbb.plupload._updateRow = phpbb.plupload.updateRow;

alert("1.5");


Ik krijg alleen de 1 te zien. De 1.5 al niet meer.
Gewijzigd op 03/01/2015 08:14:06 door Eddy E
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.