[PHP] Function binnen een function gebruiken

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Scotix
  • Registratie: Juni 2002
  • Laatst online: 19:46
Hallo GoT-ers :)

Voor een website heb ik function geschreven om BB codes om te zetten in html codes.
Goed gelukt enzo maar bij te grote plaatjes wordt de layout te breed en dat staat natuurlijk niet.
Dus ik heb een functie geschreven die links van plaatjes checkt en kijkt of ze groter zijn dan kan. (in dit geval 400 pixels)

Werkt allemaal goed.
Alleen in combinatie met elkaar heb ik ze nog neit aan de gang gekregen.
Hier voorbeeldje van het image resize scriptje:
PHP:
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
        function imageresizen($link){
        
        $bestand = @fopen($link, "r");
            if($bestand){ 
        
                $size = getimagesize($link);
                
                    if($size[0] > 400){
                    
                            $return = "<a href=\"".$link."\">[img]\"".$link."\"[/img]</a>";
                    
                    }
                    else{
                    
                            $return = "[img]\"".$link."\"[/img]";
                    
                    }
            }   
            else{
                $return = $link;
            }
                
                return $return;
        
        
        }


En hier de BB code functie, ik post een klein deel ervan omdat de rest eigelijk niet van toepassing is:

PHP:
1
2
3
4
5
6
7
8
9
10
function BBcode($input,$html_allowed){

              if($html_allowed != "yes"){
              $input = htmlspecialchars($input);  //HTML allowed
              }

              $input = preg_replace("/(\\[img\])(.*)(\\[\/img\])/U","[img]\"\\2\"[/img]", $input);

              return $input;
}


Ik heb het volgende al geprobeerd:

PHP:
1
2
3
4
5
6
7
8
9
10
function BBcode($input,$html_allowed){

              if($html_allowed != "yes"){
              $input = htmlspecialchars($input);  //HTML allowed
              }

              $input = preg_replace("/(\\[img\])(.*)(\\[\/img\])/U",imageresizen("\2"), $input);

              return $input;
}


Maar dan krijg ik deze foutmelding:

Fatal error: Call to undefined function: imageresize() in /home/xbox/public_html/functions/FUNCTIONS.bbcode.php on line 36

Ik heb de functie imageresize al binnen de bbcode functie gezet maar dat lukt ook niet.

met de search kon ik ook al niets vinden.
Weet iemand een oplossing?
Hoe kan ik de functie imageresize laten werken op de BBcode.

alvast bedankt :)

Acties:
  • 0 Henk 'm!

Verwijderd

Fatal error: Call to undefined function: imageresize() in /home/xbox/public_html/functions/FUNCTIONS.bbcode.php on line 36
Je functie heet toch imageresizen()?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik zie in de foutmelding die je noemt de n achter aan de naam van de functie niet terug. Heb je die wel goed getikt op regel 36?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Scotix
  • Registratie: Juni 2002
  • Laatst online: 19:46
Verwijderd schreef op donderdag 07 april 2005 @ 15:49:
[...]

Je functie heet toch imageresizen()?
foutje van mij :) naja als ik de functie geod benoem dan krijgik gewoon geen output daar.

ik voer
[img]de url[/img]
in en ik krijg niks terug

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Scotix schreef op donderdag 07 april 2005 @ 15:56:
[...]


foutje van mij :) naja als ik de functie geod benoem dan krijgik gewoon geen output daar.

ik voer
[[url=de url]afbeelding[/url]]
in en ik krijg niks terug
Kun je even wat specifieker zijn in je probleemomschrijving. Wij hebben geen glazenbol en hebben jouw code niet geschreven, vandaar. Maak het voor ons duidelijk waar jij denkt dat het probleem zit en wat heb je al ondernomen om het probleem op te lossen. Alleen zeggen 'Het werkt niet', daarmee kunnen we jouw niet helpen (Gokken, maar dat is ook niet alles). Wij willen jouw graag helpen, maar hebben daarvoor wel enige relevante informatie voor nodig.

Acties:
  • 0 Henk 'm!

  • rb338
  • Registratie: Januari 2001
  • Laatst online: 05-01 12:58
Juist!

Daar dacht ik ook meteen aan toen ik de titel zag :)

Acties:
  • 0 Henk 'm!

  • Scotix
  • Registratie: Juni 2002
  • Laatst online: 19:46
Ik heb 2 functies
bbcode(); // die zorgt ervoor dat de BB codes worden omgezet in html
en
imageresizen() // die kijkt hoe breed het plaatje si, en als die groter is als (in dit geval) 400 wordt in de img tag het volgende gezet: width="400"

ze werken afzonderlijk van elkaar goed.
maar nu wil ik dat imageresizen() ook samen met BBcode werkt
dus als er in de ingevoerde tekst ergens [img]de url[/img] wordt gezet wil ik dat hij checkt ( imageresizen() ) of het plaatje groter is dan 400 pixels.

hierboven heb ik dus aantal dingen geprobeerd die niet werken.


//edit: ik zal de genoemde functie even bekijken. :)

[ Voor 7% gewijzigd door Scotix op 07-04-2005 16:04 ]


Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Mocht preg_replace_callback() niet de oplossing zijn:

En als je de return value van je imageresizen functie eerst in een variabele stopt? Zou niet moeten hoeven, maar het kan geen kwaad om het te proberen.

Mijn Library Thing catalogus


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Crayne schreef op donderdag 07 april 2005 @ 16:06:
Mocht preg_replace_callback() niet de oplossing zijn:

En als je de return value van je imageresizen functie eerst in een variabele stopt? Zou niet moeten hoeven, maar het kan geen kwaad om het te proberen.
Bedoel je hier een global? Lijkt me geen goed plan, globals zijn over het algemeen vies en meestal onnodig. :)

Het probleem is hier gewoon dat preg_replace() geen functieaanroep pikt als tweede parameter.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Scotix
  • Registratie: Juni 2002
  • Laatst online: 19:46
Ik kom er nog niet uit.
-NMe- schreef op donderdag 07 april 2005 @ 16:09:
Het probleem is hier gewoon dat preg_replace() geen functieaanroep pikt als tweede parameter.
hoe kan ik er voor zorgen dat hij wel die functie aanroept?

Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

-NMe- schreef op donderdag 07 april 2005 @ 16:09:
[...]

Bedoel je hier een global? Lijkt me geen goed plan, globals zijn over het algemeen vies en meestal onnodig. :)
Nee nee, ik bedoel gewoon dat hij binnen zijn BBcode functie een variabele initialiseert, daarin zijn imageresizen functie aanroept en vervolgens die variabele invult in de preg_replace die hij gebruikt.

Dit dus:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function BBcode($input,$html_allowed){

              if($html_allowed != "yes"){
              $input = htmlspecialchars($input);  //HTML allowed
              }

              $imageResizenOutput = imageresizen("\2");

              $input = preg_replace("/(\\[img\])(.*)(\\[\/img\])/U",$imageResizenOutput, $input);

              return $input;
}
Het probleem is hier gewoon dat preg_replace() geen functieaanroep pikt als tweede parameter.
Maar als hij wel een variabele pikt, is mijn suggestie misschien wel de oplossing.

[ Voor 51% gewijzigd door Crayne op 07-04-2005 16:17 ]

Mijn Library Thing catalogus


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Scotix schreef op donderdag 07 april 2005 @ 16:14:
Ik kom er nog niet uit.


[...]


hoe kan ik er voor zorgen dat hij wel die functie aanroept?
Door preg_replace_callback() te gebruiken, zoals ik al hintte. :P Je moet dan overigens wel je imageresizen() functie aanpassen, of een wrapper functie maken. Je kan niet zomaar _callback toevoegen aan de functienaam en verwachten dat het werkt. ;)

Kijk nog een keer goed naar het voorbeeld op php.net, daarmee moet je er wel uit kunnen komen wat je moet doen. :)

[ Voor 36% gewijzigd door NMe op 07-04-2005 16:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Scotix
  • Registratie: Juni 2002
  • Laatst online: 19:46
eindelijk is het gelukt:) , harstikke bedankt voor jullei hulp.
Hier de oplossing:

de functie imageresizen()

PHP:
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
        function imageresizen($link){
        
        $bestand = @fopen($link['2'], "r");
            if($bestand){ 
        
                $size = getimagesize($link['2']);
                
                    if($size[0] > 400){
                    
                            $return = "<a href=\"".$link['2']."\">[img]\"".$link['2']."\"[/img]</a>";
                    
                    }
                    else{
                    
                            $return = "[img]\"".$link['2']."\"[/img]";
                    
                    }
            }   
            else{
                $return = $link['2'];
            }
                
                return $return;
        
        
        }


en de bb code lijn:

PHP:
1
$input = preg_replace_callback("/(\\[img\])(.*)(\\[\/img\])/U","imageresizen", $input);

Acties:
  • 0 Henk 'm!

  • MaNdM
  • Registratie: April 2001
  • Laatst online: 07:09

MaNdM

1000-dingen-doekje

Niet geheel van toepassing op de vraag maar misschien wel interessant voor de mensen die hier nog doorheen bladeren. Ik heb voor een site ook een UBB-code gemaakt om een afbeelding uit een tabel te selecteren op basis van zijn ID. De UBB zou dan zijn [image=3] en daar moet dan in de plaats een <img> komen.

Als eerste is de functie nodig om een plaatje op basis van het ID te zoeken en de juiste <img> tag aan te maken en te returnen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Plaatje($string)
{
    $sql="SELECT DISTINCT img_filename from tblimage WHERE img_id = '$string'";
    $result= mysql_query("$sql")or die("Connect Error: ".mysql_error());
    $row = mysql_fetch_row($result);

    $file = $row['img_filename'];

    mysql_free_result($result);

    if(!isset($file))
    {
        $file="nopic.jpg";
    }

    return "[img]\"../images/content/".$file."\"[/img]";
}

PHP:
1
    $contents = preg_replace("/\[image=(.*?)\]/e", "''.Plaatje('\\1').''", $contents);


Zoals te zien is kan het ook met een preg_replace(). Misschien dat iemand er nog iets mee kan.

To be determined...

Pagina: 1