Simple Machines Community Forum

SMF Support => Language Specific Support => Español (Spanish) => Aiheen aloitti: Lituakis - joulukuu 17, 2012, 09:52:45 AP

Otsikko: Llamando función php en un topic
Kirjoitti: Lituakis - joulukuu 17, 2012, 09:52:45 AP
Buenas a todos, acabo de empezar con SMF hoy mismo y tengo una duda.

En primer lugar lo que quiero es llamar una función de un php que he creado dentro de un topic, esta función pediría una variable que se daría en el mismo.

¿Es posible hacerlo? Por aquí voy a dejar un ejemplo de lo que intento hacer.

Imaginemos que tengo un php llamado test.php, que me acabo de inventar pues el php que hice es demasiado extenso como para ponerlo de ejemplo...

Lainaa
function funciondeprueba($var){

$res = "Hola, me llamo $var";
echo $res;
}

Ahora incluiría el php en index.template:

Lainaainclude_once ("test.php");

Hasta aquí todo correcto y simple, el caso sería:
-Crear un nuevo tema en el foro, y que este echo pudiera verse reflejado en el mismo. Algo así:


# <--Estructura BBCode
¿Cómo te llamas? [html]<?php funciondeprueba(Pedro); ?>[/html]



Con esto lo que buscaría es que en el propio tema dijera: ¿Cómo te llamas? Hola me llamo Pedro.

Lógicamente esto no funciona, pues parece ser que el tag html no acepta funciones php. ¿Sabéis algún método para reproducir lo que intento hacer?

Gracias por adelantado.  ;)
Otsikko: Re: Llamando función php en un topic
Kirjoitti: ^HeRaCLeS^ - joulukuu 17, 2012, 07:21:13 IP
En principio creo que seria demasiado vulnerable si tu sitio pudiera ejecutar codigo php desde un topic.

Lo que podes hacer es crear un nuevo bbc y que ese bbc use el codigo del archivo php.
En la seccion de tutoriales hay algunos que enseñan a crear nuevos bbc
Otsikko: Re: Llamando función php en un topic
Kirjoitti: Lituakis - joulukuu 17, 2012, 09:13:22 IP
Lainaus käyttäjältä: ^HeRaCLeS^ - joulukuu 17, 2012, 07:21:13 IP
En principio creo que seria demasiado vulnerable si tu sitio pudiera ejecutar codigo php desde un topic.

Lo que podes hacer es crear un nuevo bbc y que ese bbc use el codigo del archivo php.
En la seccion de tutoriales hay algunos que enseñan a crear nuevos bbc

Lógicamente he intentado de mil maneras hacerlo por bbc, pero de ninguna forma consigo que las posibles variables ($1) me sirvan.

He mirado por el foro de tutoriales, pero no he visto ninguno de creación de bbc que ejecuten una funcion que requiera una variable.

Si tienes alguno en mente, te agradecería enormemente que me lo linkearas.
Otsikko: Re: Llamando función php en un topic
Kirjoitti: ^HeRaCLeS^ - joulukuu 17, 2012, 10:00:14 IP
que o cuantas variables son las que necesitas ejecutar?
Porque a los bbc le podes poner valores extras, como en el caso del tag img que tiene como valores opcionales el ancho y alto.

Pero obviamente estoy hablando a ciegas porque no se bien que es lo que necesitas
Otsikko: Re: Llamando función php en un topic
Kirjoitti: Lituakis - joulukuu 18, 2012, 06:54:11 IP
Lainaus käyttäjältä: ^HeRaCLeS^ - joulukuu 17, 2012, 10:00:14 IP
que o cuantas variables son las que necesitas ejecutar?
Porque a los bbc le podes poner valores extras, como en el caso del tag img que tiene como valores opcionales el ancho y alto.

Pero obviamente estoy hablando a ciegas porque no se bien que es lo que necesitas

Veamos, voy a poner un ejemplo de código parecido.

En primer lugar con un php, lo que hago es tomar la cantidad de visitas de un video de youtube, donde la $id, es el video.



function test($id){

$data = file_get_contents("http://www.youtube.com/watch?v=$id");

if ( preg_match('|<span class="watch-view-count">(.*?)</span>|is' , $data , $Mens ) )
     $Mensajes = $Mens[1];

  return $Mensajes;
}



Luego de esto, coloqué el siguiente array en Subs.php:


array(
  'tag' => 'ejemplo',
  'type' => 'unparsed_equals',
  'before' => test('$1'),
),



Aquí llamamos a la función de antes y damos como variable el $1.

Y en un topic con BBCode pondríamos lo siguiente:

[ejemplo=9bZkp7q19f0][/ejemplo]



Para ver las visitas del GANGNAM STYLE, por ejemplo.

El codigo php funcona correctamente pero co bbcode no va.

¿El problema? El valor de $1 no lo toma, más bien toma como valor el propio "$1" intentando asi buscar: http://www.youtube.com/watch?v=$1

¿Alguna idea?
Otsikko: Re: Llamando función php en un topic
Kirjoitti: vicram10 - joulukuu 19, 2012, 10:06:53 AP
De la forma como lo colocaste seria de la siguiente forma tu bbcode..


[ejemplo]9bZkp7q19f0[/ejemplo]





Edit.: ejemplo de como hacer la funcion dentro del bbcode es este pagerank BBcode (http://custom.simplemachines.org/mods/index.php?action=parse;mod=1227;attach=137529;smf_version=2.0_RC3)

Haciendo el bbcode de esta forma


array(
'tag' => 'pagerank',
'type' => 'unparsed_content',
'content' => '$1',
'validate' => create_function('&$tag, &$data, $disabled', '
$pagerank = pagerank($data);
$data = strtr($data, array(\'<br />\' => \'\'));
$data = "<a href=\"". $data ."\" target=\"_blank\">".$data."</a>".$pagerank;
'),
),


donde en create_function es la creacion de una funcion de validacion y donde se puede usar una funcion de php que creaste..

para el ejemplo es este

$pagerank = pagerank($data);

donde $data es lo que le pasaste por parametro o sea

Lainaa[ejemplo]9bZkp7q19f0[/ejemplo]
Otsikko: Re: Llamando función php en un topic
Kirjoitti: Lituakis - joulukuu 19, 2012, 10:41:09 AP
Te lo agradezco enormemente, el create_function del validate, me ha venido de perlas.

Ahora aparentemente funciona tal como esperaba, nuevamente gracias.  ;)
Otsikko: Re: Llamando función php en un topic
Kirjoitti: vicram10 - joulukuu 19, 2012, 12:14:39 IP
de nada para eso estamos..
marcamos como solucionado ;)