Inserire social-sharing GitHub in un blocco sotto al contenuto

11 contenuti / 0 new
Ultimo contenuto
Inserire social-sharing GitHub in un blocco sotto al contenuto

Aiuto !
Come si fa ad inserire i social sharing in oggetto indicati in https://github.com/cferdinandi/social-sharing ?

1) creo i due css integrandoli in uno e lo chiamo social-sharing-css.css

.btn {
  display: inline-block;
  font-size: 0.9375em;
  padding: 0.5em 0.6875em;
  line-height: 1.2;
  font-weight: normal;
  background-color: #0088cc;
  border: 0.0725em solid #0088cc;
  border-radius: 0.0725em;
  margin-right: 0.3125em;
  margin-bottom: 0.3125em;
}
.btn,
.btn:hover,
a .btn:hover,
.btn.active {
  color: white;
}
.btn:hover,
a .btn:hover,
.btn.active {
  background-color: #005580;
  border-color: #005580;
  text-decoration: none;
}
.btn-google {
  background-color: #d64937;
  border-color: #d64937;
}
.btn-google:hover,
a .btn-google:hover {
  background-color: #a02f21;
  border-color: #a02f21;
}
.btn-facebook {
  background-color: #3b5997;
  border-color: #3b5997;
}
.btn-facebook:hover,
a .btn-facebook:hover {
  background-color: #263960;
  border-color: #263960;
}
.btn-tweet {
  background-color: #41b7d8;
  border-color: #41b7d8;
}
.btn-tweet:hover,
a .btn-tweet:hover {
  background-color: #238caa;
  border-color: #238caa;
}

2) Passo il css nel file .info del tema

3) Creo il blocco

4) come faccio a passare le variabili MIO-TITLE e MIA-URL nel blocco ?
Ringrazio chi mi da una mano
Giovanni

Drupal Version:

Il codice del blocco dovrebbe essere il seguente:

<p>
<button class="btn btn-google" onclick="location.href='https://plus.google.com/share?url=$node_url';">Google+</button> <button class="btn btn-tweet" onclick="location.href='https://twitter.com/intent/tweet?text=$title&amp;url=$node_url';">Tweet</button> <button class="btn btn-facebook" onclick="location.href='http://www.facebook.com/sharer/sharer.php?u=$node_url';">Facebook</button>
</p>

Le variabili da passare al blocco sono $node_url e $title contenute in node.tpl.php.

Quale hook bisogna usare per iniettare le variabili nel blocco e come farlo ?

Ciao, questo è un codice da personalizzare:

<?php
function currentnode_nid(){
    if (
arg(0)=='node' && is_numeric(arg(1)))
        return
arg(1);
    else
        return
0;
}
/* node_load return object
*
stdClass Object
(
    [vid] => 1
    [uid] => 1
    [title] => Career Tip 1
    [log] =>
    [status] => 1
    [comment] => 2
    [promote] => 1
    [sticky] => 0
    [nid] => 1
    [type] => career_tips
    [language] => und
    [created] => 1377871907
    [changed] => 1377871907
    [tnid] => 0
    [translate] => 0
    [revision_timestamp] => 1377871907
    [revision_uid] => 1
    [body] => Array
*
*/
function currentnode(){
    return
node_load(currentnode_nid());
}
/**
 * Implements hook_block_view().
 *
 * Displays the most recent 10 blog titles.
 */
function MYMODULE_block_view($delta = '') {
  global
$user;
   
$curnode = currentnode();
   
$node_url = drupal_get_path_alias('node/'.$curnode->nid);
   
$title = $node->title;
   
$node_shared = '<p>
<button class="btn btn-google" onclick="location.href=\'<a href="https://plus.google.com/share?url=" rel="nofollow">https://plus.google.com/share?url=</a>$node_url\';">Google+</button> <button class="btn btn-tweet" onclick="location.href=\'<a href="https://twitter.com/intent/tweet?text=" rel="nofollow">https://twitter.com/intent/tweet?text=</a>$title&amp;url=$node_url\';">Tweet</button> <button class="btn btn-facebook" onclick="location.href=\'<a href="http://www.facebook.com/sharer/sharer.php?u=" rel="nofollow">http://www.facebook.com/sharer/sharer.php?u=</a>$node_url\';">Facebook</button>
</p>'
;
     
$block['subject'] = t('MYMODULE shared');
     
$block['content']['MYMODULE_list'] = $node_shared;
     
$block['content']['MYMODULE_more'] = array(
       
'#theme' => 'more_link',
       
'#url' => 'MYMODULE',
       
'#title' => t('Read the latest MYMODULE entries.'),
      );
      return
$block;
}
function
MYMODULE_block($op = 'list', $delta = 0, $edit = array()) {
 
$blocks = array();
  if (
$op == 'list') {
   
$blocks[0]['info'] = t("MYMODULE's block");
   
$blocks[0]['cache'] = BLOCK_CACHE_PER_PAGE;
   
$blocks[0]['css'] = array(drupal_get_path('module', 'MYMODULE') .'/MYMODULE.css');
   
$blocks[0]['js'] = array(drupal_get_path('module', 'MYMODULE') .'/MYMODULE.js');
  }
  return
$blocks;
}
?>

Ciao e scusa ma ho visto il post poco fa...

Ciao danzisiweb, prima di tutto ti ringrazio molto per la risposta ed apprezzo ciò che hai fatto.
Ora, però, ti chiedo scusa in anticipo perchè ti dico: "Non può essere !".
Non può essere perchè cerco una risposta facile.
Non può essere perchè pootrei anche capire un semplice hook per passare due variabili.
Non può essere perchè Drupal non può essere così.
Giovanni :-)

In effetti a me come soluzione non piace per niente!
Ma se proprio vuoi inserire cdel codice php nel blocco (sconsigliato dai guru perchè non versionabile) fai pure con phpfilter.
Demo: http://danzisiweb.altervista.org/node/1356

ah, Buona Pasqua... a tutti

Ciao Giovanni,
se vuoi aggiungere lo share sui soli contenuti (nodi) e non sei vincolato all'utilizzo di un blocco potrebbe essere più conciso utilizzare hook_node_view

come nell'esempio sotto

<?php
function MYMODULE_node_view($node, $view_mode, $langcode) {
 
// nella visualizzazione del nodo intero
 
if ($view_mode == 'full') {
   
// creo il markup.. ma utilizzare una funzione di theme custom
    // potrebbe semplificare e rendere piu pulito il codice
   
$alias = drupal_get_path_alias('node/' . $node->nid);
   
$markup = 'creo il mio markup..' . $node->title . ' ' . $alias;
   
$node->content['my_social_sharing'] = array(
     
'#markup' => $markup,
     
'#weight' => 10,
    );
   
//attach del css
   
$node->content['#attached']['css'][] = drupal_get_path('module', 'MYMODULE') . '/mio_css.css';
  }
}
?>

buon lavoro

@willzyx
ti ringranzio per la risposta; anche la tua soluzione sembra di difficile applicazione.
Le variabili devono essere disponibili nel blocco e forse, la funzione più idonea potrebbe essere un THEME_preprocess_block(&$variables), se il flusso di Drupal lo permette.
Ciao :-)

L'approccio che ti ho indicato è alternativo ai blocchi. Esegui l'attach del tuo widget al nodo.
Comunque, ovunque tu possa eseguire codice php (nei tuoi moduli, nel blocchi con php filter etc) puoi ricavare le variabili di cui hai bisogno con :

<?php
  $path
= current_path();
 
$alias = drupal_get_path_alias($path);
 
$title = drupal_get_title();
?>

Ciao

@willzyx e @danzisiweb,
vi ringrazio molto; sembra proprio che mi serviva eseguire codice php nel blocco con PHP filter.
In test va, domani provo in produzione.
@danzisiweb,
cosa significa sconsigliato dai guru perchè non versionabile ?
Grazie a tutti.

Effettivamente, oltre a mancare ancora la risposta di @danzisiweb, la creazione di un blocco con php filter presuppone, come io l' avevo fatto, del codice css in più ed inutile che verrebbe eseguito per ogni percorso del sito.
L' indicazione di @willzyx nel punto #6 sembrerebbe la migliore, seppure, per le mie conoscenze, di più difficile implementazione; infatti il codice proposto da @willzyx esegue il css solo per i nodi full.
@willzyx, non potresti spiegare meglio questa parte ?

// creo il markup.. ma utilizzare una funzione di theme custom
// potrebbe semplificare e rendere piu pulito il codice

@willzyx, come fai a conoscere queste cose dopo solo 5 gg. nel forum ?
Immagino che non hai solo un nick!
:-) Giovanni

Ciao Giovanni,
ti allego una versione che utilizza la funzione di theme; Separare logica e theming rende a mio modo di vedere più pulito il codice

<?php
/**
 * Implements hook_node_view()
 */
function MYMODULE_node_view($node, $view_mode, $langcode) {
 
// nella visualizzazione del nodo intero
 
if ($view_mode == 'full') {
   
// sharing
   
$node->content['my_social_sharing'] = array(
     
'#theme' => 'my_social_sharing',
     
'#title' => $node->title,
     
'#path' =>  drupal_get_path_alias('node/' . $node->nid),
     
'#weight' => 10,
    );
   
//attach css
   
$node->content['#attached']['css'][] = drupal_get_path('module', 'MYMODULE') . '/mio_css.css';
  }
}
/**
 * Implements hook_theme()
 */
function MYMODULE_theme() {
  return array(
   
'my_social_sharing' => array(
     
'variables' => array('title' => NULL, 'path' => NULL)
    )
  );
}
/**
 * theme function my_social_sharing
 */
function theme_my_social_sharing(&$variables) {
 
$title = $variables['title'];
 
$path = $variables['path'];
 
$output = '<div>creo il mio markup..' . $title . ' ' . $path .'</div>';
  return
$output;
}
?>

L'equivalente (sempre con caricamento dei css al bisogno) può essere implementato anche utilizzando i blocchi (meglio non con php fiter però qui leggi il perche) . Se ti serve ti mando un esempio

@willzyx, come fai a conoscere queste cose dopo solo 5 gg. nel forum ?
Immagino che non hai solo un nick!

Giovanni ho solo questo nick.. magari conosco drupal da più tempo di quanto conosco questo forum! :)

ciao