Adicionar (substituir) hiperlink para imagens em uma Web Part de apresentação de slides da Biblioteca de Imagens
-
10-12-2019 - |
Pergunta
Em nosso site de equipe, adicionamos uma web part que é uma web part "Apresentação de slides da biblioteca de imagens".Atualmente, clicar nas imagens que rolam na apresentação de slides direciona o navegador apenas para o URL da imagem.Gostaria de modificar isso para apontar para qualquer outro URL de minha escolha.
Tentei forçar uma modificação do javascript gerado pela webpart da apresentação de slides usando meu próprio script na página.Olhando para a fonte, a Biblioteca de Imagens usa um var que realmente define os links, é chamado de "linkArray":
var pictureArray = ['http://intranet/HomePicture/_w/image1.jpg','http://intranet/HomePicture/_w/image2.jpg'];
var linkArray = ['http://intranet/HomePicture/image1.jpg','http://intranet/HomePicture/image2.jpg'];
var titleArray = ['',''];
var descriptionArray = ['',''];
var heightArray = [268,268];
var widthArray = [383,383];
Usando meu próprio script, tentei limpar o array e inserir meus próprios links nele, mas por algum motivo os links apenas são atualizados (ou seja,a função do meu script é executada) após as primeiras alterações de imagem.Mesmo que eu altere manualmente a tag href da primeira imagem, o script ainda pensa que a "primeira" imagem é a segunda para a qual a apresentação de slides rola.Existe uma maneira de forçar a função a substituir o javascript existente imediatamente no carregamento da página?
Solução 3
Depois de esgotar todas as outras opções ao tentar forçar a imagem da web part da página a começar a alterar os links do primeiro item carregado, encontrei uma solução alternativa que é simplesmente usar uma função de rotação em meu array.Como o comportamento compensa as associações de imagem para hiperlink em 1 item, girar a matriz que atribuo aos links de imagem em 1 também os combina perfeitamente.
Outras dicas
Como funciona a web part de apresentação de slides da biblioteca de imagens
Itens de imagem são recuperados via SPQuery de Biblioteca de Imagens e os resultados são salvos na matriz interna de ImageInfo
entradas
public struct ImageInfo
{
public int width;
public int height;
public string src;
public string fullImageSrc;
public string title;
public string descrption;
}
e essas informações são renderizadas no lado do cliente e armazenadas nos seguintes arrays:
var pictureArray = [...];
var linkArray = [...];
var titleArray = [...];
var descriptionArray = [...];
var heightArray = [...];
var widthArray = [...];
e depois disso o controle Slideshow é inicializado no lado do cliente:
var slideshowObject = new SlideshowObject(slideshowObjectId, pictureArray, linkArray, titleArray, descriptionArray, heightArray, widthArray, transitionTime, mode);
ChangePic(slideshowObject);
Como manipular imagens para apresentação de slides
Isso poderia ser alcançado com a substituição SlideshowObject
construtor, nesse caso é possível fornecer lógica adicional quando SlideshowObject é criado.
Por exemplo, o exemplo a seguir demonstra como excluir imagens sem títulos da exibição em Apresentação de slides:
//Overridden SlideshowObject constructor with method for excluding pictures
function SlideshowObjectInitializer() {
SlideshowObject = (function(SlideshowObjectOrig) {
return function() {
//Exclude pictures
if(typeof excludePic != 'undefined') {
for(i=0,k=0;i<arguments[1].length;i++) {
var imageInfo = {src: arguments[1][i], fullImageSrc: arguments[2][i], title: arguments[3][i],description: arguments[4][i], height: arguments[5][i], width: arguments[6][i]};
if(excludePic(imageInfo)) {
for(j=1;j<7;j++) {
arguments[j].splice(i, 1);
}
i--;
}
}
}
//Call original SlideshowObject constructor
return SlideshowObjectOrig.apply(this, arguments);
};
})(SlideshowObject);
}
//Exclide pictures with no titles
function excludePic(imageInfo) {
return (imageInfo.title.length == 0);
}
ExecuteOrDelayUntilScriptLoaded(SlideshowObjectInitializer, 'imglib.js');
Por favor siga meu blog publicar para detalhes.
Parece que a primeira imagem já foi renderizada antes da execução do javascript.A ideia é localizar e alterar "manualmente" a tag href dessa imagem diretamente no DOM.