[Rendimiento]  Crear un tag code personalizado
* URL del foro: http://www.infra-films.info/new/ * Versión del foro: 1.6.4 * Actualización: No Hola, estoy intentando crear un mycode personalizad...


Hola, estoy intentando crear un mycode personalizado igual al tag:
Código:
[code][/code]

Pero me gustaría modificarlo, por ejemplo, me gustaría sustituir el texto 'Codigo:' por otro texto, pero no sé el reemplazo básico para el tag code y así poder crear uno a parte.

Muchas gracias y saludos.
Última modificación: 8 Aug, 2011, 5:00 am por seevee.
En parte es CSS, si quieres cambiar la palabra "Código":
ACP-> Ajustes -> Leguajes -> Editar lenguaje -> Editar global.lang.php -> y control + f y buscas "Código" y donde sale algo como:
code
TEXTAREA - Código
Editas el "Código" por tu texto.
Más que nada lo que quiero es crear uno aparte del custom tag code, no modificarlo...
He creado el tag a partir del tag 'code' de la siguiente forma:
Expresión regular:
Código:
\[pass2\](.*?)\[/pass2\]
Reemplazo
Código:
<div class="codeblock">
    <div class="title">
        "Password"
    </div>
<div class="body" dir="ltr">
    <code>$1</code></div></div>

Vale, lo tengo, pero si entre este nuevo tag pongo una url me la hace con link y se supone que dentro de 'code' no debería aparecer el link. Que estoy haciendo mal?
Última modificación: 8 Aug, 2011, 12:30 pm por seevee.
No te entiendo.
(.*?) no es la unica REGEX que existe en el mundo, debes escribir uno que permita todo y los links e images y todo eso los convierta a texto.

Puedes ver como funciona el tag [code] revisando los archivos de mybb.
{SIGNATURE_IMAGE}
A ver.... he revisado todo lo que he podido pero nada.

He creado un mycode el cual quiero que haga la función del mycode "code". Hasta cierto punto lo he conseguido, pero cuando pongo texto dentro de dicho mycode, como por ejemplo, una dirección web, me la convierte a link. Y yo quiero que el nuevo mycode que estoy creando, todo el texto que ponga dentro incluidas urls, no puedan ser linkadas.

Un ejemplo: El mycode que estoy creando es un clon del mycode 'code', pero lo quiero para poder poner dentro contraseñas de archivos comprimidos. Algunos usuarios usan la dirección de una web para las contraseñas, entonces, cuando ponen el password dentro del nuevo mycode que he creado, convierte el texto en un link. Y yo no quiero que lo convierta en un link. Como el ejeplo que sigue:
Código:
http://www.soportemybb.com/

Como podéis ver, usando el mycode "code" al poner una url, no permite "linkar" sobre dicha url. Y eso es precisamente lo que quiero hacer con el mycode que he creado, que a nivel de apariencia es idéntico al mycode "code" pero que al poner una url dentro, si permite "linkarla" y yo eso no lo quiero.
No es posible hacerlo sin editar archivos core de MyBB (class_parser.php para ser exactos).

El funcionamiento del tag [code] funciona de una forma bastante "hacky" (a falta de un mejor término).
Cuando MyBB ejecuta la clase de parseo, estas son las acciones que se realizan:

- Se extraen todo los [code] y se los guarda en una variable aparte.
- Se ejecutan todos los otros MyCods (incluyendo el que reemplaza las URLs por links)
- Se insertan los [code] nuevamente.

Para que funcione tendrías que modificar el archivo antes mencionado para que extraiga las tags [code] y las [pass].
Última modificación: 9 Aug, 2011, 4:27 pm por ExplosiveMan.
Bueno, la verdad es que soy bastante profano y no domino la técnica propuesta...
Ok, tienes suerte que no tengo ganas de trabajar Smile

----

Te dejo los pasos para que el tag [pass] funcione igual que el tag [ code]

1) Borra el MyCode que agregaste desde el panel de administración

2) Edita el archivo class_parser.php y realiza los siguientes cambios:
Código:
/* ========== BUSCA (lineas 129 y 130): ========== */

preg_match_all("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", $message, $code_matches, PREG_SET_ORDER);
$message = preg_replace("#\[(code|php)\](.*?)\[/\\1\](\r\n?|\n?)#si", "<mybb-code>\n", $message);

/* ========== REEMPLAZAR POR: ========== */

preg_match_all("#\[(code|php|pass)\](.*?)\[/\\1\](\r\n?|\n?)#si", $message, $code_matches, PREG_SET_ORDER);
$message = preg_replace("#\[(code|php|pass)\](.*?)\[/\\1\](\r\n?|\n?)#si", "<mybb-code>\n", $message);


Código:
/* ========== BUSCA (Linea 177 a 180): ========== */

elseif(my_strtolower($text[1]) == "php")
{
    $code = $this->mycode_parse_php($text[2]);
}

/* ========== AGREGA DEBAJO: ========== */

elseif(my_strtolower($text[1]) == 'pass')
{
    $code = $this->mycode_parse_pass($text[2]);
}


Código:
/* ========== BUSCA (linea 711 a 718): ========== */

/**
* Parses code MyCode.
*
* @param string The message to be parsed
* @param boolean Are we formatting as text?
* @return string The parsed message.
*/
function mycode_parse_code($code, $text_only=false)

/* ========== AGREGA ARRIBA: ========== */

/**
* Parses pass MyCode.
*
* @param   string  The message to be parsed
* @param   bool    Are we formatting as text?
* @return  string  The parsed message.
*/
function mycode_parse_pass($code, $text_only = false)
{
    global $lang;

    if($text_only == true)
    {
        return "\nPassword\n--\n{$code}\n--\n";
    }

    // Clean the string before parsing.
    $code = preg_replace('#^(\t*)(\n|\r|\0|\x0B| )*#', '\\1', $code);
    $code = rtrim($code);
    $original = preg_replace('#^\t*#', '', $code);

    if(empty($original))
    {
        return;
    }

    $code = str_replace('$', '$', $code);
    $code = preg_replace('#\$([0-9])#', '\\\$\\1', $code);
    $code = str_replace('\\', '\', $code);
    $code = str_replace("\t", '&nbsp;&nbsp;&nbsp;&nbsp;', $code);
    $code = str_replace("  ", '&nbsp;&nbsp;', $code);

    return "<div class=\"codeblock\">\n<div class=\"title\">Password\n</div><div class=\"body\" dir=\"ltr\"><code>".$code."</code></div></div>\n";
}

Resultado: http://www.diigo.com/item/image/1hlvd/wjvd
El único problema es que puede que tengas que realizar estos cambios cada vez que actualices la versión de MyBB.
Lo probaré! Muchísimas gracias compañero!!
Lo he probado, pero al acceder al foro no se me muestra ninguna página...
Última modificación: 12 Aug, 2011, 11:03 am por seevee.