Jurnal

Less. Better.

Menu
  • Home
  • Plimbări
  • Echipamente
  • Recomand
  • Contact
Menu

Plone 6, Volto: find items containing a block

Posted on 22.01.202522.01.2025 by GhitaB

In my case I searched for items that contains any kind of “form” block:

Register a view (MyView):

configure.zcml

  <browser:page
      name="my-view"
      for="*"
      class=".admin.MyView"
      permission="cmf.ManagePortal"
      />

admin.py

from Products.Five.browser import BrowserView
from plone import api
from zope.component.hooks import getSite


def find_items_with_form_blocks():
    SEARCH_WORD = 'form'
    portal = getSite()
    catalog = api.portal.get_tool("portal_catalog")

    results = []

    def search_in_blocks(blocks):
        if not isinstance(blocks, dict):
            return False

        for block_id, block_data in blocks.items():
            if SEARCH_WORD in block_data.get("@type", ""):
                return True

            nested_blocks = block_data.get("blocks", {})
            if search_in_blocks(nested_blocks):
                return True

        return False

    for brain in catalog():
        obj = brain.getObject()
        if hasattr(obj, "blocks") and search_in_blocks(obj.blocks):
            results.append(
                {
                    "title": obj.Title(),
                    "url": obj.absolute_url(),
                }
            )

    return results


class MyView(BrowserView):
    def __call__(self):
        results = find_items_with_form_blocks()
        if results:
            for result in results:
                print(f"Title: {result['title']}")
                print(f"URL: {result['url']}")
                print("-" * 20)
        else:
            print("No results found.")

        import pdb

        pdb.set_trace()

        return results

Then go to localhost:8080/Plone/my-view

Title: Lorem Ipsum form
URL: http://localhost:8080/Plone/en/some/path
--------------------
Title: Lorem 2
URL: http://localhost:8080/Plone/en/another/path
--------------------
> /app/sources/my.addon/my/addon/browser/admin.py(54)__call__()
-> return results
(Pdb) results
[{'title': 'Lorem Ipsum form', 'url': 'http://localhost:8080/Plone/en/some/path'}, {'title': 'Lorem 2', 'url': 'http://localhost:8080/Plone/en/another/path'}]
(Pdb) q
Tags: Volto, docs, plone, solutions, web development
Category: Docs

Post navigation

← Orașele lumii: Los Angeles
Teorema Cușteriței →

Archives

  • October 2026 (10)
  • September 2026 (11)
  • August 2026 (6)
  • July 2026 (1)
  • May 2026 (4)
  • March 2026 (1)
  • February 2026 (1)
  • December 2025 (4)
  • November 2025 (1)
  • September 2025 (1)
  • March 2025 (5)
  • February 2025 (6)
  • January 2025 (7)
  • December 2024 (5)
  • November 2024 (3)
  • October 2024 (2)
  • September 2024 (2)
  • August 2024 (4)
  • July 2024 (14)
  • June 2024 (2)
  • May 2024 (3)
  • March 2024 (6)
  • February 2024 (7)
  • January 2024 (11)
  • December 2023 (3)
  • November 2023 (36)
  • October 2023 (8)
  • September 2023 (5)
  • August 2023 (16)
  • July 2023 (8)
  • June 2023 (1)
  • October 2008 (1)
  • October 2007 (1)
  • October 2006 (1)
  • October 2005 (1)
  • October 2003 (1)
  • October 1995 (1)
  • October 1994 (1)
  • October 1990 (1)
  • June 1988 (1)
  • October 1976 (1)
  • October 1945 (1)
  • March 1941 (1)

Categories

  • 27 (1)
  • Acasă (18)
  • Amintiri (19)
  • Creștine (39)
  • Desen (6)
  • Din cărți (1)
  • Docs (21)
  • Duldy & Țâcă (5)
  • Fotografie (43)
  • Gânduri (52)
  • Grădină (1)
  • Interesant (5)
  • Istorie (3)
  • Jurnal (68)
  • Limba română (3)
  • Muzică (34)
  • Personal (47)
  • Plimbări (30)
  • Programare (6)
  • Știri (4)

Tags

acasă (15) amintiri (16) am scris asta (3) animale (2) biblice (16) Bihor (17) biserică (3) creștine (68) desen (6) Docker (2) docs (20) Duldy & Țâcă (5) fotografie (43) funny (22) git (2) GitHub (2) gânduri (64) interesant (2) istorie (7) jurnal (98) Krita (5) limba română (2) momente (80) muzică (34) muzică preluată (28) natură (6) orașele lumii (4) Padiș (11) personal (77) plimbare (24) plone (12) poezii (2) povești (4) programare (5) recunoștință (2) România (26) schoolism (2) sketchbook (5) solutions (11) Stâna de Vale (2) terorism (1) versuri (2) video (2) Volto (3) web development (10)

RSS Feed Subscribe
© 2026 Jurnal | Powered by Minimalist Blog WordPress Theme