Pages

terça-feira, 8 de janeiro de 2013

SlideShow de posts Recentes. Explicado e Testado

Um dos artigos que mais gerou dúvidas nesse ano foi o Slide automático de posts. Não se esquecendo de fazer um backup, para prevenir problemas.

1° Passo

É entrar no html do seu blog e procurar por ]]</b:skin> ou ]]></b:skin>. Logo abaixo disso cole:
<script type='text/javascript'>
//<![CDATA[
(function($){
$.fn.postslide = function(vars) {     
var element     = this;
var timeOut     = (vars.timeOut != undefined) ? vars.timeOut : 6000;
var current     = null;
var timeOutFn   = null;
var faderStat   = true;
var mOver       = false;
var items       = $("#" + element[0].id + "Content ." + element[0].id + "Image");
var itemsSpan   = $("#" + element[0].id + "Content ." + element[0].id + "Image span");
items.each(function(i) {
$(items[i]).mouseover(function() {
mOver = true;
});
$(items[i]).mouseout(function() {
mOver   = false;
fadeElement(true);
});
});
var fadeElement = function(isMouseOut) {
var thisTimeOut = (isMouseOut) ? (timeOut/2) : timeOut;
thisTimeOut = (faderStat) ? 10 : thisTimeOut;
if(items.length > 0) {
timeOutFn = setTimeout(makeSlider, thisTimeOut);
} else {
console.log("Poof..");
}
}
var makeSlider = function() {
current = (current != null) ? current : items[(items.length-1)];
var currNo      = jQuery.inArray(current, items) + 1
currNo = (currNo == items.length) ? 0 : (currNo - 1);
var newMargin   = $(element).width() * currNo;
if(faderStat == true) {
if(!mOver) {
$(items[currNo]).fadeIn((timeOut/6), function() {
if($(itemsSpan[currNo]).css('bottom') == 0) {
$(itemsSpan[currNo]).slideUp((timeOut/6), function() {
faderStat = false;
current = items[currNo];
if(!mOver) {
fadeElement(false);
}
});
} else {
$(itemsSpan[currNo]).slideDown((timeOut/6), function() {
faderStat = false;
current = items[currNo];
if(!mOver) {
fadeElement(false);
}
});
}
});
}
} else {
if(!mOver) {
if($(itemsSpan[currNo]).css('bottom') == 0) {
$(itemsSpan[currNo]).slideDown((timeOut/6), function() {
$(items[currNo]).fadeOut((timeOut/6), function() {
faderStat = true;
current = items[(currNo+1)];
if(!mOver) {
fadeElement(false);
}
});
});
} else {
$(itemsSpan[currNo]).slideUp((timeOut/6), function() {
$(items[currNo]).fadeOut((timeOut/6), function() {
faderStat = true;
current = items[(currNo+1)];
if(!mOver) {
fadeElement(false);
}
});
});
}
}
}
}
makeSlider();
};
})(jQuery);  
//]]>
</script>
<script type='text/javascript'>
$(document).ready(function() {
$(&#39;#postslide&#39;).postslide({
timeOut: 6000});
});
</script>
Não mude nada.
Agora, Procure no seu template se você não tem alguma linha igual a essa:
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js' type='text/javascript'/>
Se tiver, não coloque a acima. Te não tiver, cloque. Motivo: Essa linha não pode aparecer duas vezes.
Salve o modelo.

2° Passo

Agora, procure novamente pela linha ]]</b:skin> ou ]]></b:skin> e, logo ACIMA dela, cole:
#slide-wrapper ul li {
list-style:none;
margin:0;
padding:0;
}

#slide-wrapper {
text-align:left;
margin-left:auto;
border:1px solid #e5e5e5;
margin-right:auto;
width:417px;
padding:0;
}

#postslide {
height:250px;
width:417px;
overflow:hidden;
position:relative;
margin:0 auto;
}

#postslideContent {
position:absolute;
top:0;
right:0;
width:417px;
background:#333;
margin:0;
}

.postslideImage {
display:none;
float:left;
position:relative;
}

.postslideImage span {
background-color:#000;
color:#fff;
display:none;
filter:alpha(opacity=70);
-moz-opacity:0.7;
-khtml-opacity:0.7;
opacity:0.7;
font-size:17px;
left:0;
bottom:0;
position:absolute;
width:400px;
line-height:15px;
margin:0;
padding:20px 15px;
}

.postslideImage span p {
font-size:12px;
line-height:12px;
width:417px;
margin:0;
padding:10px 25px 15px 0;
}

.postslideImage a:link,.postslideImage a:visited,.postslideImage a:hover {
color:#fff;
}
Salve.

3° Passo

Agora, procure por: <div id='main-wrapper'> ou <div class='main-outer'> ou <div class='column-center-outer'>. Logo abaixo disso, coloque:
<div id='slide-wrapper'>
<div id='postslide'>
<script type='text/javascript'>
imgr = new Array();
imgr[0] = &quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9UrSgMuODTQCPUjjam5cjOvybZQ0Khlr2cy6NQzVW1QdWdNsWQV4Yz4gungrTRGk2Prez4pIHaB0nSbQK9bU4GYDBZ7FnJQ__miybpNeGNotVM_GVTPubkXp3fCUISyX8al6WsGDH2QkX/&quot;;
showRandomImg = true;
imgwidth = 417;
imgheight = 250;
summaryPost = 100;
startpost = 1;
numposts = 9;
home_page = &quot;<data:blog.homepageUrl/>&quot;;
</script>
<script type='text/javascript'>
//<![CDATA[
function removeHtmlTag(strx,chop){var s=strx.split("<");for(var i=0;i<s.length;i++){if(s[i].indexOf(">")!=-1){s[i]=s[i].substring(s[i].indexOf(">")+1,s[i].length);}}
s=s.join("");s=s.substring(0,chop-1);return s;}
function showrecentposts(json){document.write('<ul id="postslideContent">');j=(showRandomImg)?Math.floor((imgr.length+1)*Math.random()):0;img=new Array();for(var i=0;i<numposts;i++){var entry=json.feed.entry[i];var posttitle=entry.title.$t;var posturl;if(i==json.feed.entry.length)break;for(var k=0;k<entry.link.length;k++){if(entry.link[k].rel=='alternate'){posturl=entry.link[k].href;break;}}
if("content"in entry){var postcontent=entry.content.$t;}
else
if("summary"in entry){var postcontent=entry.summary.$t;}
else var postcontent="";if(j>imgr.length-1)j=0;img[i]=imgr[j];s=postcontent;a=s.indexOf("<img");b=s.indexOf("src=\"",a);c=s.indexOf("\"",b+5);d=s.substr(b+5,c-b-5);if((a!=-1)&&(b!=-1)&&(c!=-1)&&(d!=""))img[i]=d;var item='<li class="postslideImage"><a href="'+posturl+'"><img src="'+img[i]+'" width="'+imgwidth+'" height="'+imgheight+'"/></a><span><a href="'+posturl+'">'+posttitle+'</a> <p>'+removeHtmlTag(postcontent,summaryPost)+'...</p></span></li>';if(summaryPost==0){item='<li class="postslideImage"><a href="'+posturl+'"><img src="'+img[i]+'" width="'+imgwidth+'" height="'+imgheight+'"/></a><span><a href="'+posturl+'">'+posttitle+'</a></span></li>';}
document.write(item);j++;}
document.write('</ul>');}
document.write("<script src=\""+home_page+"feeds/posts/default?max-results="+numposts+"&start-index="+startpost+"&orderby=published&alt=json-in-script&callback=showrecentposts\"><\/script>");
//]]>
</script>
</div>
</div>
Caso não ache as linhas acima, coloque esse codigo em um widget do tipo HTML/JavaScript.

Detalhes:

Caso queira que o widget fique somente na pagina inicial, apenas acrescente as linhas no código acima (código do 3° passo):

Antes: <b:if cond='data:blog.pageType != &quot;item&quot;'> 
Depois: </b:if>

OBS: Não faça isso se você colocou o código anterior dentro de um widget HTML/JavaScript. 

Testado em vários blogs de teste. Caso não dê certo, Refaça o tutorial com mais atenção.