Vai al contenuto

ip content e o stato a cosa stai pensando

Featured Replies

Inviato

Bomale come hai fatto a diventare cosi bravo?

ho lavorato un po sugli hook, un pò sulle pagine php, provenendo da una discreta esperienza in html e css... è stato esaltate vedere come il php interagisse con tutto, poi appena 1 anno fa sono andato in profondità con ipboard e con xampp e xdebug riesci a controllare i meccanismi che compongono il sistema...

ho avuto una breve esperienza con wordpress, phpbb ma mi ritengo ancora inesperto perchè nella pratica me la cavo un pò ma non raggiungo ancora ad un livello "professionale" dove sai di preciso come fare una determinata cosa (non capita quasi mai di scrivere lo stesso codice anche se il funzionamento è lo stesso... con ipboard però c'è una linea guida che ti riporta a memorizzare/imparare una fase del lavoro facendoti risparmiare tempo).

Infine unico consiglio è leggere attentamente le poche guide che ci sono su invisionpower, e poi fare dei piccoli esercizi usando cose imparate prima e quelle appena apprese... poi se hai le risorse potresti vedere come lavorano gli altri sugli script nel marketplace, e devo dire che imparare l'inglese serve più che mai in questo campo :( altrimenti vieni tagliato fuori...

 

tutto questo casino x un tasto che richiam delle emo...mi chiedo perche quelli di ipb non mettono di default un tasto per gli smile...c'è così tanta roba all'avangurdia poi si perdono in cazzate....mah

magari c'è un altro template o oppure potresti caricare l'editor completo invece del textarea... ci sono molte soluzioni ma preferisco anche io lasciare un campo e affiancargli un pulsante per le emoticon.

http://www.invisionpower.com/support/guides/_/advanced-and-developers/api-methods/editor-bbcode-r146

http://www.invisionpower.com/support/guides/_/advanced-and-developers/api-methods/34-editor-and-parsing-methods-r229

con l'editor lo script si interrompe perchè non trova un $('statusUpdate_page') mentre con l'input si :/ quindi se metti l'editor non ci saranno controlli ajax

post-29-0-49492500-1395572968_thumb.png

Inviato
  • Autore

IERI ci ho pensato e mi sono detto, ma xe fare uso del linguaggio php complicarmi la vita quando è possibile mettere questo benedetto pulsante con codici esterni  a ip.bord..e infatti sono arrivato alla conclusione di inserire dei codici identificativi da collegare alla textarea con un click mettendo tutto dentro uno spoiler che nasconde i div con scritto emoticons... ed il risultato e perfetto :D ...la pecca e solo che devo inserire i codici delle emo una alla volta, ma direi che si puo fare..

Logicamente le emo vanno aggiunte ne ho messe un po per farvi vedere il risultato che e perfetto :D

rdw94d5u.gif

Modificato da trattore

Inviato

la pecca e solo che devo inserire i codici delle emo una alla volta

usa questo codice per generare le emoticon dalla cache

        print "<div class=\"alist\" id='lista_emo' style='height:100px;overflow:auto;display:none'>";        if( is_array( $this->cache->getCache('emoticons') ) && count( $this->cache->getCache('emoticons') ) )        {            foreach ($this->cache->getCache('emoticons') as $v)            {print '<A onClick="emoticon(\'' . $v['typed'] . '\')"><img src="public/style_emoticons/' . $v['emo_set'] . '/' . $v['image'] .'" /></A>';            }        }print "</div>";

poi io per provare sto usando questo javascript, e ho aggiunto nel <form> la proprietà name="myForm"

<script type="text/javascript">function emoticon(theSmilie){document.myForm.content.value += " " + theSmilie + " ";}function toggle_visibility(id) {    var e = document.getElementById(id);    if (e.style.display == 'block') e.style.display = 'none';    else e.style.display = 'block';        hideAllBut(id);}function hideAllBut(id) {    var lists = document.querySelectorAll('.alist');    for (var i = lists.length; i--; ) {        if (lists[i].id != id) {            lists[i].style.display = 'none';        }    }}//http://stackoverflow.com/questions/15288790/show-hide-script-using-javascript</script>

unica cosa che manca ora è impaginare le emoticon... per chi ne ha impostate + di 100 è davvero un pò brutto con

 

 

potresti pubblicare il codice appena lo adegui? ne sto facendo uno anche io ormai, cosi almeno la rendiamo risorsa pubblica :)

post-29-0-07965900-1395726314_thumb.png

Inviato
  • Autore

usa questo codice per generare le emoticon dalla cache

        print "<div class=\"alist\" id='lista_emo' style='height:100px;overflow:auto;display:none'>";        if( is_array( $this->cache->getCache('emoticons') ) && count( $this->cache->getCache('emoticons') ) )        {            foreach ($this->cache->getCache('emoticons') as $v)            {print '<A onClick="emoticon(\'' . $v['typed'] . '\')"><img src="public/style_emoticons/' . $v['emo_set'] . '/' . $v['image'] .'" /></A>';            }        }print "</div>";

mi da errore forse sbaglio dove piazzarlo.. mi diresti dove metterlo?

$this->registry->class_localization->loadLanguageFile( array( 'public_profile' ), 'members' );$this->registry->class_localization->loadLanguageFile( array( 'public_boards' ), 'forums' );/* Load status class */		if ( ! $this->registry->isClassLoaded( 'memberStatus' ) )		{			$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/member/status.php', 'memberStatus' );			$this->registry->setClass( 'memberStatus', new $classToLoad( ipsRegistry::instance() ) );		}				/* Fetch */		$updates = $this->registry->getClass('memberStatus')->fetch( $this->memberData, array( 'limit' => intval( 15 ), 'status_is_latest' => 1, 'ownerOnly' => true ) );?><script type='text/javascript' src="<? print $this->settings['public_dir'] ?>js/ips.status.js"></script><div class='ipsSideBlock clearfix' id='statusHook'>	<h3><? print $this->lang->words['recent_status_updates'] ?></h3><? if ($this->registry->getClass('memberStatus')->canCreate( $this->memberData ) && !($this->settings['board_offline'] && !$this->memberData['g_access_offline'])){ print "<div class='status_update row2'><div id='nameuser'>{$this->memberData['members_display_name']}</div><div class='user_boxx'><img src='{$this->memberData['pp_small_photo']}' WIDTH=70 HEIGHT=90 /> </div><form name='statusForm' id='statusForm' action='". $this->settings['base_url']."app=members&module=profile&section=status&do=new&k=".$this->member->form_hash."&id=".$this->memberData['member_id']."' method='post'><div class='statusBoxx'>   <textarea id='statusUpdate_page' name='content' class='statusUpdatext' ></textarea></div><div class='textright'><input type='submit' id='statusSubmit_page' class='statusSubmitGloball' value='".$this->lang->words['gbl_post']."' /></div>"; 	if ((IPSLib::twitter_enabled() OR IPSLib::fbc_enabled() ) AND ( $this->memberData['fb_uid'] OR $this->memberData['twitter_id'] )){		print "  ";		if (IPSLib::twitter_enabled() AND ( $this->memberData['twitter_id'] )){ print "<input type='checkbox' id='su_Twitter' value='1' name='su_Twitter' /> <label for='su_Twitter' class='desc ipsType_smaller'>Twitter</label>"; } print " ";		if (IPSLib::fbc_enabled() AND ( $this->memberData['fb_uid'] )){ print " <input type='checkbox' id='su_Facebook' value='1' name='su_Facebook' /> <label for='su_Facebook' class='desc ipsType_smaller'>Facebook</label>"; }		}		print "<br />		<hr /></form></div>";} ?><br />                         <div class='_sbcollapsable'>		<div id="status_wrapper">			<div id="nameuser1"><? print $this->registry->getClass('output')->getTemplate('boards')->statusUpdates($updates, 1, 1) ?></div>			<div class="status_main_content ipsType_small" style='text-align: center'>				<a href='<? print $this->registry->output->buildSEOUrl( 'app=members&module=profile&section=status&type=all', 'public', true, 'members_status_all' )?>'><? print $this->lang->words['viewallupdates'] ?></a>			</div>      	</div>	</div></div><?
Inviato

$this->registry->class_localization->loadLanguageFile( array( 'public_profile' ), 'members' );

$this->registry->class_localization->loadLanguageFile( array( 'public_boards' ), 'forums' );

/* Load status class */

if ( ! $this->registry->isClassLoaded( 'memberStatus' ) )

{

$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/member/status.php', 'memberStatus' );

$this->registry->setClass( 'memberStatus', new $classToLoad( ipsRegistry::instance() ) );

}

/* Fetch */

$updates = $this->registry->getClass('memberStatus')->fetch( $this->memberData, array( 'limit' => intval( 15 ), 'status_is_latest' => 1, 'ownerOnly' => true ) );

?>

<script type='text/javascript' src="<? print $this->settings['public_dir'] ?>js/ips.status.js"></script>

<script type="text/javascript">

function emoticon(theSmilie)

{

document.myForm.content.value += " " + theSmilie + " ";

document.myForm.content.focus();

}

function toggle_visibility(id) {

var e = document.getElementById(id);

if (e.style.display == 'block') e.style.display = 'none';

else e.style.display = 'block';

hideAllBut(id);

}

function hideAllBut(id) {

var lists = document.querySelectorAll('.alist');

for (var i = lists.length; i--; ) {

if (lists[i].id != id) {

lists[i].style.display = 'none';

}

}

}

//http://stackoverflow.com/questions/15288790/show-hide-script-using-javascript

</script>

<div class='ipsSideBlock clearfix' id='statusHook'>

<h3><? print $this->lang->words['recent_status_updates'] ?></h3>

<? if ($this->registry->getClass('memberStatus')->canCreate( $this->memberData ) && !($this->settings['board_offline'] && !$this->memberData['g_access_offline'])){

print "<div class='status_update row2'>

<div id='nameuser'>{$this->memberData['members_display_name']}</div>

<div class='user_boxx'><img src='{$this->memberData['pp_small_photo']}' WIDTH=70 HEIGHT=90 /> </div>

<form

name='myForm' id='statusForm'
 action='". $this->settings['base_url']."app=members&module=profile&section=status&do=new&k=".$this->member->form_hash."&id=".$this->memberData['member_id']."' method='post'>

<div class='statusBoxx'>

<textarea id='statusUpdate_page' name='content' class='statusUpdatext' ></textarea>

</div>

<div class='textright'><input type='submit' id='statusSubmit_page' class='statusSubmitGloball' value='".$this->lang->words['gbl_post']."' />

<input type='button' class='ipsButton_secondary left' onclick=\"toggle_visibility('lista_emo');\" value=\"Emoticon\" />

</div>";

if ((IPSLib::twitter_enabled() OR IPSLib::fbc_enabled() ) AND ( $this->memberData['fb_uid'] OR $this->memberData['twitter_id'] )){

print "  ";

if (IPSLib::twitter_enabled() AND ( $this->memberData['twitter_id'] )){ print "<input type='checkbox' id='su_Twitter' value='1' name='su_Twitter' /> <label for='su_Twitter' class='desc ipsType_smaller'>Twitter</label>"; } print " ";

if (IPSLib::fbc_enabled() AND ( $this->memberData['fb_uid'] )){ print " <input type='checkbox' id='su_Facebook' value='1' name='su_Facebook' /> <label for='su_Facebook' class='desc ipsType_smaller'>Facebook</label>"; }

}

		print "<div class=\"alist ipsPad_double\" id='lista_emo' style='height:100px;overflow:auto;display:none'>";

if( is_array( $this->cache->getCache('emoticons') ) && count( $this->cache->getCache('emoticons') ) )

{

foreach ($this->cache->getCache('emoticons') as $v)

{

print '<A onClick="emoticon(\'' . $v['typed'] . '\')"><img title="'.$v['typed'].'" style="cursor:pointer" src="'.$this->settings['board_url'].'/public/style_emoticons/' . $v['emo_set'] . '/' . $v['image'] .'" /></A>';

}

}

print "</div><hr /></form></div>";

} ?>

<br />

<div class='_sbcollapsable'>

<div id="status_wrapper">

<div id="nameuser1"><? print $this->registry->getClass('output')->getTemplate('boards')->statusUpdates($updates, 1, 1) ?></div>

<div class="status_main_content ipsType_small" style='text-align: center'>

<a href='<? print $this->registry->output->buildSEOUrl( 'app=members&module=profile&section=status&type=all', 'public', true, 'members_status_all' )?>'><? print $this->lang->words['viewallupdates'] ?></a>

</div>

</div>

</div>

</div>

<?

ho separato dove ho effettuato la modifica, tenendo il tuo file come riferimento quindi puoi anche copiarlo e incollarlo ;)
Inviato
  • Autore

perfect ho sistemato tutto grz :D ...ora e davvero ok ... guardate lo stamp

post-942-0-93903300-1395800087_thumb.png

la parte delle emo le ho carcate tutte manualmente sono piu di 120 mettendo una bella scrollbar e sistemandole tutte per le dimensioni 20 x 20 px dentro delle celle....ora punto verso la modifica di mettere dei link dento un imput per le immagini che quando inserisci il link te le carica dentro i bbcode img ...ma la vedo dura

Modificato da trattore

Inviato

ma no, non usare il bbcode img... avevo postato una modifica xml in un messaggio precedente che ti permette di far funzionare bbcode e emoticon negli stati, o vuoi proprio metterli tra img a prescindere? perchè gli [ img ] prendono i link delle immagini non la scorciatoia... funziona eh ma decidi tu, si arriva alla stessa cosa :blink:

 

a un input a parte per le img...

Inviato
  • Autore

vorrei mettere un imput text che qundo un utente ci inserisce un link dentro e preme invio la carica direttamente nello stato....si potra mai fare...cchissà

Inviato

guarda per ora ho fatto un input che se cliccato sostituisce il testo selezionato nel textarea anteponendo [ img ] ... [ /img ] ... è come il pulsante emoticon ma con un altra funzione...

function immagine() {    // code for IE    var textarea = document.getElementById("statusUpdate_page");         if (document.selection)    {    textarea.focus();    var sel = document.selection.createRange();    // alert the selected text in textarea//    alert(sel.text);         // Finally replace the value of the selected text with this new replacement one    sel.text = '[img]' + sel.text + '[/img]';    }                        // code for Mozilla         var textarea = document.getElementById("statusUpdate_page");         var len = textarea.value.length;    var start = textarea.selectionStart;    var end = textarea.selectionEnd;    var sel = textarea.value.substring(start, end);         // This is the selected text and alert it//    alert(sel);         var replace = '[img]' + sel + '[/img]';         // Here we are replacing the selected text with this one    textarea.value = textarea.value.substring(0,start) + replace + textarea.value.substring(end,len);//http://snipplr.com/view/8406/}

questo sotto mettilo dopo quello delle emoticon...

		print " <input type='button' class='ipsButton_secondary' onclick=\"immagine();\" value=\"Immagine\" />";

solo che a me rimane [ img ] non formattato... quindi occorre rivedere l'xml che feci tempo fa, perchè i bbcode come [ hr ] li prende :/

Inviato
  • Autore

grz per la dritta,ma ho optato per inserire un bel script che ti permette di inserire i bbcode  sulla textarea...FANTASTICO ed e facile come un bicchiere d acqua inserirlo...grazie mille per il tuo aiuto! :D

Inviato

grazie a te per aver proposto nuove funzioni durante la discussione, spero proprio di averne altre cosi ;)

Inviato
  • Autore

j4rd59p7.gif

Inviato

j4rd59p7.gif

potresti darmi il link del tuo sito? anche in privato... non riesco a capire come mai riesci a inserire le immagini formattate :(

  • 4 mesi dopo...
Inviato
  • Autore

 

magari c'è un altro template o oppure potresti caricare l'editor completo invece del textarea... ci sono molte soluzioni ma preferisco anche io lasciare un campo e affiancargli un pulsante per le emoticon.

http://www.invisionpower.com/support/guides/_/advanced-and-developers/api-methods/editor-bbcode-r146

http://www.invisionpower.com/support/guides/_/advanced-and-developers/api-methods/34-editor-and-parsing-methods-r229

con l'editor lo script si interrompe perchè non trova un $('statusUpdate_page') mentre con l'input si :/ quindi se metti l'editor non ci saranno controlli ajax

ciao, come hai fatto per caricare l editor completo?

Inviato

avevo aggiunto:

	$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/editor/composite.php', 'classes_editor_composite' );	$editor = new $classToLoad();

poi al posto dell'input avevo messo:

$editor->show( 'content', array( 'minimize' => 1, 'type' => 'full', 'isHtml' => 1, 'legacyMode' => 'off' ) );

unico problema è che nell'editor non c'è l'id "statusUpdate_page", che permetteva all'input di inviare il messaggio con richiesta ajax (senza caricare la pagina).

  • 6 mesi dopo...
Inviato
  • Autore
$this->registry->class_localization->loadLanguageFile( array( 'public_profile' ), 'members' );$this->registry->class_localization->loadLanguageFile( array( 'public_boards' ), 'forums' );/* Load status class */		if ( ! $this->registry->isClassLoaded( 'memberStatus' ) )		{			$classToLoad = IPSLib::loadLibrary( IPS_ROOT_PATH . 'sources/classes/member/status.php', 'memberStatus' );			$this->registry->setClass( 'memberStatus', new $classToLoad( ipsRegistry::instance() ) );		}				/* Fetch */		$updates = $this->registry->getClass('memberStatus')->fetch( $this->memberData, array( 'limit' => intval( $this->settings['status_sidebar_show_x'] ), 'status_is_latest' => 1, 'ownerOnly' => true ) );?><script type='text/javascript' src="<? print $this->settings['public_dir'] ?>js/ips.status.js"></script><div class='ipsSideBlock clearfix' id='statusHook'>	<h3><? print $this->lang->words['recent_status_updates'] ?></h3><? if ($this->registry->getClass('memberStatus')->canCreate( $this->memberData ) && !($this->settings['board_offline'] && !$this->memberData['g_access_offline'])){ 	print "<div class='status_update row2'><form id='statusForm' action='". $this->settings['base_url']."app=members&module=profile&section=status&do=new&k=".$this->member->form_hash."&id=".$this->memberData['member_id']."' method='post'>		<input type='text' id='statusUpdate_page' name='content' style='width:60%' class='input_text' />		<input type='submit' id='statusSubmit_page' class='ipsButton_secondary' value='".$this->lang->words['gbl_post']."' />";		if ((IPSLib::twitter_enabled() OR IPSLib::fbc_enabled() ) AND ( $this->memberData['fb_uid'] OR $this->memberData['twitter_id'] )){		print "  ";		if (IPSLib::twitter_enabled() AND ( $this->memberData['twitter_id'] )){ print "<input type='checkbox' id='su_Twitter' value='1' name='su_Twitter' /> <label for='su_Twitter' class='desc ipsType_smaller'>Twitter</label>"; } print " ";		if (IPSLib::fbc_enabled() AND ( $this->memberData['fb_uid'] )){ print " <input type='checkbox' id='su_Facebook' value='1' name='su_Facebook' /> <label for='su_Facebook' class='desc ipsType_smaller'>Facebook</label>"; }		}		print "<br />		<hr />	</form></div>";} ?><br />	<div class='_sbcollapsable'>		<div id="status_wrapper">			<div id="status_wrapper_inside"><? print $this->registry->getClass('output')->getTemplate('boards')->statusUpdates($updates, 1, 1) ?></div>			<div class="status_main_content ipsType_small" style='text-align: center'>				<a href='<? print $this->registry->output->buildSEOUrl( 'app=members&module=profile&section=status&type=all', 'public', true, 'members_status_all' )?>'><? print $this->lang->words['viewallupdates'] ?></a>			</div>			</div>	</div></div><?

funziona in tutto e per tutto... se vuoi più di 5 risultati devi modificare $this->settings['status_sidebar_show_x'] nel codice e sostituirlo con un numero maggiore ;)

 

l'importante è che ips.status.js venga caricato, ci pensa lui a autoinserire o autoaggiornare(se il più recente è il tuo viene sostituito, cioè non eliminato dal sistema, lasciando l'ultimo valore di stato... i precedenti sono comunque archiviati nel tuo profilo) il tuo ultimo stato pubblicato  :D

 

ps: per abilitare emoticon e bbcode occorre installare questo xml tra le hooks (leggi qui per ulteriori info)

 

ciao scusa, mi puoi dire come si modifica quella parte di codice che citi, per avere piu risultati? grz mille

Inviato
  • Autore

risolto ....

array( 'limit' => intval( $this->settings['status_sidebar_show_x'] = '15' )

Per favore accedi per lasciare un commento

Potrai lasciare un commento dopo aver effettuato l'accesso

Accedi Ora

Chi sta navigando 0

  • Nessun utente registrato visualizza questa pagina.

Informazioni importanti

Abbiamo inserito dei cookies nel tuo dispositivo per aiutarti a migliorare la tua esperienza su questo sito. Puoi modificare le impostazioni dei cookie, altrimenti puoi accettarli cliccando su continua. to insert a cookie message.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.