News:

Wondering if this will always be free?  See why free is better.

Main Menu

llamar avatar desde codigo

Started by ZabiinoOo, August 13, 2023, 09:03:14 PM

Previous topic - Next topic

ZabiinoOo

Hola amigos estoy armando un codigo y me gustaria saber como se hace el llamado en smf, use las variables generales de smf ['user]['avatar']['image'] pero esto llama al mismo avatar personal no el avatar de un usuario correspondiente a un tema en especifico

un resumen de mi consulta que estoy usando es:

select uu.avatar

FROM {db_prefix}messages AS mes
LEFT JOIN {db_prefix}members as uu ON (mes.id_member = uu.id_member)

while ($row = $smcFunc['db_fetch_assoc']($request))
    {
$context['code'] = array(
'avat' => $row['avatar'],
    );
}


y estoy haciendo el llamado asi:

' , $context['code']['avat'], '

pero no me muestra el avatar, creo que el llamado de avatar necesita un formato de llamado para que tome imagen, sabrian cual seria o si algo estoy errando en mi codigo? no se como hace el llamado general de los avatars smf he revisado y desde el display los toma asi:

', $message['member']['avatar']['image'], '
lo que no se cual es la query que usa para decodificar la imagen del avatar y mostrarla ahi creo que es donde estoy errando con mi codigo, si me podrian ayudar les agradeceria

ZabiinoOo

#1
Disculpen ya lo pude hacer, solo era agregar el formato en el llamado del avatar

Ahora lo que si es que me esta tomando los avatars externos (url) no me toma los avatars locales del foro

Mensajes combinados.  Por favor, evita publicar tantos mensajes consecutivos dentro de una hora y en vez modifica el mensaje - Iris.

ZabiinoOo

alguno sabra como combinar que en el llamado de avatar tome los avatar externos y locales del foro porfavor, de que forma podria hacerlo

Diego Andrés

Eso ya viene cargado desde memberContext.
Asumo que estás usando SMF 2.1?
En el Display.php:
'member' => &$memberContext[$message['id_member']],

Igual no entiendo mucho qué quieres hacer exactamente, ya tienes los avatares en cada mensaje con $message['member']['avatar']

SMF Tricks - Free & Premium Responsive Themes for SMF.

ZabiinoOo

entiendo, el problema es que no estoy usando el membercontext estoy programandolo desde un mod usando las consultas (query) del mismo mod, lo tengo todo modificado lado consultas todo esta como lo deje arriba y trabaja perfecto, lo unico que estoy haciendo el llamado al avatar asi:

<img class="avatar" src="' , $context['code']['avat'], '" alt="" height="80" width="100" />
y esta tomando solo avatar externos porque el formato src agrega formato url, cosa que los avatars locales con este formato no los consigue porque quedaria un ejemplo https://"nombreavatar" y obviamente no va a mostrar la imagen porque no es una ruta correcta, lo que quiero es un formato que pueda tomar tanto los avatars externos como los internos o locales podria agregar uno usando "midominio.com/avatars/" pero con esto mostraria solo los locales y los externos no los mostraria, entonces lo que busco es que tome ambos avatars externos e internos dentro de un mismo formato de llamado, esta mejor explicado espero se entienda lo que busco

Diego Andrés

Creo que tienes que utilizar href.
$message['member']['avatar']['href']

SMF Tricks - Free & Premium Responsive Themes for SMF.

ZabiinoOo

Quote from: Diego Andrés on August 14, 2023, 10:25:54 PMCreo que tienes que utilizar href.
$message['member']['avatar']['href']

no, no me estas entendiendo, fijate asi tengo algunos avatars en mi foro:



como puedes ver los externos son ejemplo:
http://33.media.tumblr.com/45e144a5f8a53cb697e9a55d74336865/tumblr_nh9h3gG1fu1rp0vkjo1_500.gif
estos avatars los toma y los muestra bien mediante el codigo de llamado:

<img class="avatar" src="' , $context['code']['avat'], '" alt="" height="80" width="100" />
pero los avatars locales que son alojados en las carpetas del foro como por ejemplo:

Actors(New)/7.png
no los toma y los muestra, razon? el primero es un enlace directo el cual el src reconoce y imprime la imagen, pero los que estan en carpeta al no ser un enlace directo si no una carpeta el enlace src no la consigue y por lo cual no muestra ninguna imagen, quiero es saber como hacer para que cuando sea enlace directo como cuando sea en carpeta igual imprima y muestre la imagen con un solo codigo a la vez, o alguna otra forma de hacerlo

Diego Andrés

Precisamente con $memberContext lo obtienes ya con las rutas correctas.
Quizás hay algo que estas omitiendo. En un mensaje anterior mostrabas la query que utilizas pero eso no se necesita.
Lo ideal sería que muestres el código completo para ver detalladamente lo que estás haciendo.

SMF Tricks - Free & Premium Responsive Themes for SMF.

ZabiinoOo

Quote from: Diego Andrés on August 15, 2023, 08:20:49 AMPrecisamente con $memberContext lo obtienes ya con las rutas correctas.
Quizás hay algo que estas omitiendo. En un mensaje anterior mostrabas la query que utilizas pero eso no se necesita.
Lo ideal sería que muestres el código completo para ver detalladamente lo que estás haciendo.

he probado con $memberContext y no toma porque simple el archivo que estoy usando no trabaja con esto, te comento estoy colocando un ranking top es decir el tema mas top del dia respecto a las gracias recibidas del foro en general lo muestra como el tema mas top por lo cual lo que quiero hacer es tomar el avatar de este usuario que creo el tema top por lo cual la consulta que indicas no tiene validez, estoy usando el archivo:

$sourcedir/BoardIndex.php
arriba he dejado todas las consultas que estoy usando:

Quote from: ZabiinoOo on August 13, 2023, 09:03:14 PMHola amigos estoy armando un codigo y me gustaria saber como se hace el llamado en smf, use las variables generales de smf ['user]['avatar']['image'] pero esto llama al mismo avatar personal no el avatar de un usuario correspondiente a un tema en especifico

un resumen de mi consulta que estoy usando es:

select uu.avatar

FROM {db_prefix}messages AS mes
LEFT JOIN {db_prefix}members as uu ON (mes.id_member = uu.id_member)

while ($row = $smcFunc['db_fetch_assoc']($request))
    {
$context['code'] = array(
'avat' => $row['avatar'],
    );
}


y estoy haciendo el llamado asi:

' , $context['code']['avat'], '

pero no me muestra el avatar, creo que el llamado de avatar necesita un formato de llamado para que tome imagen, sabrian cual seria o si algo estoy errando en mi codigo? no se como hace el llamado general de los avatars smf he revisado y desde el display los toma asi:

', $message['member']['avatar']['image'], '
lo que no se cual es la query que usa para decodificar la imagen del avatar y mostrarla ahi creo que es donde estoy errando con mi codigo, si me podrian ayudar les agradeceria

no creo haya falta explicar todo el codigo

ZabiinoOo

y asi estoy haciendo el llamado del avatar:

<img class="avatar" src="' , $context['code']['avat'], '" alt="" height="80" width="100" />
funciona bien pero me esta tomand solo los avatars externos, los locales no los muestra,

he usado tu codigo:
'member' => &$memberContext[$message['id_member']],
en BoardIndex.php y he hecho el llamado asi desde el ".template.php"

<img class="avatar" src="' , $message['member']['avatar'], '" alt="" height="80" width="100" />
y nada como te indique amigo

Diego Andrés

Quote from: ZabiinoOo on August 15, 2023, 04:15:45 PMhe probado con $memberContext y no toma porque simple el archivo que estoy usando no trabaja con esto

No estoy seguro a que te refieres.

function custom_function()
{
	
global 
$memberContext;

	
$users 0// ID de un usuario o idealmente, un arreglo con múltiples ids de usuarios. Por ejemplo: $users = array(1,2,3,4,5);

	
// Load the user or users data
	
loadMemberData($users);

	
// Carga los datos del usuario (incluyendo avatar y más)...
	
loadMemberContext($arreglo_original['user']['id']); // Hipotéticamente, en el foreach,for,while, etc.
	
/// Puedes utilizar $users, pero en realidad quieres cargar al usuario actual que estás recorriendo, en un arreglo diferente.

	
// Supuesta asignación de valores
	
...
	
'avatar' => $memberContext[$arreglo_original['user']['id']]['avatar'],
	
...
}



Y para el otro método, utilizando una query. Te falta agregar la tabla de attachments.
...
mem.id_member, mem.avatar, mem.email_address, a.id_attach a.filename, a.attachment_type
...
LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = m.id_member)
Y después puedes llamar a la función helper.

$arreglo
['member']['avatar'] = set_avatar_data(array(
	
	
	
	
'avatar' => $row['avatar'],
	
	
	
	
'email' => $row['email_address'],
	
	
	
	
'filename' => !empty($row['filename']) ? $row['filename'] : ''
	
	
	
))

O en su defecto agregar la info manualmente, como lo estabas haciendo.

SMF Tricks - Free & Premium Responsive Themes for SMF.

ZabiinoOo

entiendo amigo, pero el attachments no lo estas llamando abajo en el array, solo estas llamando al filename que en este caso que funcion tendria el filename y en el llamado si esta asi:

<img class="avatar" src="' , $context['code']['avat'], '" alt="" height="80" width="100" />
como deberia quedar luego de esta sugerencia que indicas? algo asi:

<img class="avatar" src="' , $context['code']['avat']['filename'], '" alt="" height="80" width="100" />
o como quedaria, te agradezco el tiempo mi bro

Diego Andrés

No tienes que utilizarlo si lo agregas con la función helper.
Lo puedes revisar en Load.php si quieres hacer algo similar.

SMF Tricks - Free & Premium Responsive Themes for SMF.

ZabiinoOo

Quote from: Diego Andrés on August 15, 2023, 09:55:10 PM
Quote from: ZabiinoOo on August 15, 2023, 04:15:45 PMhe probado con $memberContext y no toma porque simple el archivo que estoy usando no trabaja con esto

No estoy seguro a que te refieres.

function custom_function()
{
	
global 
$memberContext;

	
$users 0// ID de un usuario o idealmente, un arreglo con múltiples ids de usuarios. Por ejemplo: $users = array(1,2,3,4,5);

	
// Load the user or users data
	
loadMemberData($users);

	
// Carga los datos del usuario (incluyendo avatar y más)...
	
loadMemberContext($arreglo_original['user']['id']); // Hipotéticamente, en el foreach,for,while, etc.
	
/// Puedes utilizar $users, pero en realidad quieres cargar al usuario actual que estás recorriendo, en un arreglo diferente.

	
// Supuesta asignación de valores
	
...
	
'avatar' => $memberContext[$arreglo_original['user']['id']]['avatar'],
	
...
}



Y para el otro método, utilizando una query. Te falta agregar la tabla de attachments.
...
mem.id_member, mem.avatar, mem.email_address, a.id_attach a.filename, a.attachment_type
...
LEFT JOIN {db_prefix}attachments AS a ON (a.id_member = m.id_member)
Y después puedes llamar a la función helper.

$arreglo
['member']['avatar'] = set_avatar_data(array(
	
	
	
	
'avatar' => $row['avatar'],
	
	
	
	
'email' => $row['email_address'],
	
	
	
	
'filename' => !empty($row['filename']) ? $row['filename'] : ''
	
	
	
))

O en su defecto agregar la info manualmente, como lo estabas haciendo.

usando el ejemplo que me pasaste llamando a filename tengo entendido llamaria a los avatars subidos desde el foro o archivos subidos desde el foro por asi decirlo, mas no tomaria en cuenta a los avatars que usan los usuarios con enlaces externos ya que no los descarga y los aloja dentro del servidor web para tener un enlace interno de dicho archivo, ahora para prueba lo he implementado y tambien he implementado la adaptacion del url de llamado del avatar usando "<img class="avatar" src="/avatarSubida/' , $context['code']['filename'], '" alt="" height="80" width="90" />" en la url de llamado y toma perfectamente el avatar del usuario siempre y cuando hayan usado el sistema de subir avatar, por lo cual si usan un enlace externo del avatar no va a tomar este avatar porque simplemente no lo va a conseguir en la ruta configurada mencionada anteriormente, me esta sacando canas adaptar este sistema y el problema que no se como lo toma smf el lamado a avatars tanto internos como externos

Diego Andrés

Quote from: ZabiinoOo on August 22, 2023, 09:33:40 PMy el problema que no se como lo toma smf el lamado a avatars tanto internos como externos

Con set_avatar_data() o $memberContext lo hace...

SMF Tricks - Free & Premium Responsive Themes for SMF.

Advertisement: