Localizar e substituir em massa nas páginas do Palette
O conteúdo criado com o Palette vive dentro da árvore de componentes de cada página — títulos, rich text, rótulos de botões, destinos de links e referências de mídia ficam todos guardados nos inputs salvos da página. Isso torna uma alteração em todo o site complicada: o mesmo nome de produto ou logo pode aparecer em dezenas de páginas, e não há um único campo para editar.
Os novos comandos do Palette Pro resolvem exatamente isso. Cada um percorre todas as páginas do Palette, reescreve apenas o que corresponde, salva somente as páginas que realmente mudaram e pode pré-visualizar tudo com --dry-run antes de tocar no banco de dados.
Renomear um produto
Altere o nome de um produto ou recurso onde quer que apareça no texto das páginas e nos botões.
Renomear a marca da empresa
Troque um nome antigo de empresa por um novo em todo o site em uma única execução.
Redirecionar links
Mova todos os links de uma URL ou página antiga para um novo destino — interno ou externo.
Substituir o logo
Aponte toda referência a uma imagem/logo antiga para um novo item de Mídia, em todo o site.
O ponto de partida
Nossa página de demonstração traz os quatro ingredientes em uma única visualização: um logo no cabeçalho, um botão de produto “Download Palette”, links de navegação e call-to-action, e uma imagem de mídia no destaque (hero).

① Texto e nomes — ppr:string
Renomear um produto or company across the site
Suponha que o produto “Palette” será renomeado para “Prism”. Comece com um dry run para ver exatamente o que mudaria — nada é gravado ainda:
$ drush ppr:string "Palette" "Prism" --dry-run ---------------- ------------- Canvas page ID Occurrences ---------------- ------------- 13 7 22 1 ---------------- ------------- [OK] [dry-run] Substituiria "Palette" -> "Prism": 8 ocorrência(s) em 2 página(s).
A tabela por página mostra onde estão as correspondências. Gostou? Remova o --dry-run para aplicar:
$ drush ppr:string "Palette" "Prism" [OK] Replaced "Palette" -> "Prism": 8 ocorrência(s) em 2 página(s).
O botão do produto é atualizado imediatamente — junto com todo outro “Palette” no texto das páginas, títulos e rich text:
Antes

Depois

A correspondência é uma simples substituição de substring, aplicada aos valores de string, ao HTML de rich text, e ao título e descrição de cada página. É sensível a maiúsculas, então Palette e palette são tratados separadamente.
② Links — ppr:link
Apontar todos os links para uma nova página
Quando uma landing page muda de endereço, atualize o destino onde quer que esteja linkada. O comando de links corresponde ao URI do link exatamente, então /about nunca reescreve acidentalmente /about-us. Funciona tanto para URLs absolutos quanto internos do Drupal (internal:/…).
$ drush ppr:link "https://www.drupal.org/project/canvas_palette" \ "https://prism.example.com/download" --dry-run ---------------- ------------- Canvas page ID Occurrences ---------------- ------------- 13 4 ---------------- ------------- [OK] [dry-run] Would replace https://www.drupal.org/project/canvas_palette -> https://prism.example.com/download: 4 ocorrência(s) em 1 página(s).
Cada call-to-action, item de navegação e botão embutido que apontava para o endereço antigo agora aponta para o novo — em um único comando, sem edição página por página.
Links internos também
Redirecionar entre páginas do site funciona da mesma forma: drush ppr:link "internal:/old-page" "internal:/new-page".
③ Mídia e logo — ppr:media
Trocar um logo ou imagem em todos os lugares
As referências de mídia são trocadas por identidade. Cada argumento pode ser um ID de mídia numérico ou um UUID, e ambos são validados antes de qualquer alteração. Aqui substituímos o logo antigo do cabeçalho (mídia 24) por um novo (mídia 9):
$ drush ppr:media 24 9 --dry-run ---------------- ------------- Canvas page ID Occurrences ---------------- ------------- 13 1 ---------------- ------------- [OK] [dry-run] Substituiria mídia 24 -> mídia 9: 1 ocorrência(s) em 1 página(s). $ drush ppr:media 24 9 [OK] Replaced media 24 -> media 9: 1 occurrence(s) across 1 page(s).
Como o cabeçalho aparece em todas as páginas que o usam, uma única execução renomeia a marca do logo em todo o site. O comando cobre referências de imagem e vídeo dos componentes, bem como o próprio campo de imagem da página.
Antes — old logo

Depois — new logo

A renomeação completa da marca, lado a lado
Três comandos curtos — um nome, um link, um logo — e a página é transformada, com exatamente as mesmas edições aplicadas a todas as outras páginas do Canvas do site.
Antes

Depois

Feito para ser seguro em sites reais
- Pré-visualize primeiro. Todo comando aceita
--dry-run, imprimindo as contagens exatas por página sem gravar nada. - Somente o que mudou é salvo. Páginas sem correspondência permanecem intactas, mantendo o histórico de revisões limpo.
- Correspondência precisa. Links correspondem por URI exato; mídia por ID/UUID validado — sem edições colaterais.
- Execuções resilientes. Se uma página contém dados legados de componente que o Canvas não consegue mais salvar, ela é pulada com um aviso claro em vez de abortar todo o lote.
$ drush ppr:string "About us" "Our Story" ! [WARNING] 1 página(s) correspondeu mas não pôde ser salva (dados de componente inválidos preexistentes) e foi pulada: ---------------- ------------------------------------------------------------ Canvas page ID Erro ao salvar ---------------- ------------------------------------------------------------ 9 inputs.baf00a36…flex_direction: A propriedade flex_direction é obrigatória. ---------------- ------------------------------------------------------------
A execução continua e cada página saudável ainda é atualizada — a página pulada é relatada por ID para que você possa corrigi-la separadamente.
Referência de comandos
| Comando | Alias | O que ele substitui |
|---|---|---|
palette-pro:replace-string "<search>" "<replace>" | ppr:string | Qualquer substring em valores de string, HTML de rich text, e título / descrição da página. |
palette-pro:replace-link "<old-uri>" "<new-uri>" | ppr:link | URIs de link com correspondência exata (e strings de link puras). Absolutos ou internal:/…. |
palette-pro:replace-media <old> <new> | ppr:media | Referências de mídia em todos os lugares (imagens/vídeos de componentes + campo de imagem da página). Os argumentos são um ID de mídia ou UUID. |
Adicione --dry-run a qualquer comando para pré-visualizar. Cada um imprime uma tabela por página de quantas ocorrências foram tocadas.