In Anqi CMS, to better present and manage text content, the system内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置内置wordwrapandwordcountThey each play an indispensable role in content operation.
wordwrapFilter: Allows long text to be automatically wrapped elegantly.
As the name suggests,wordwrapThe main function of the filter is to automatically wrap long text according to the specified length.Imagine that the content area of your article has a limited width, but some paragraphs are particularly long and do not have line breaks. When displayed, they will burst the layout and affect the aesthetics.wordwrapit comes into play.
It will insert a newline character at the spaces in the text based on the character length you set.This way, no matter how long the original text is, it can be neatly limited within the set width, keeping the page layout tidy and enhancing the reading experience of the user.This is especially useful for scenarios that require adapting to different screen sizes (such as responsive design) or specific content container widths.
For example, if your text is in English and you want it to automatically wrap every 5 characters (at spaces):
{{ "Lorem ipsum dolor sit amet, consectetur adipisici elit."|wordwrap:5 }}
This code will process the original long text into an effect similar to the following (for clarity, we assume that line breaks are output here, but the actual effect is based on HTML/CSS rendering):
Lorem
ipsum
dolor
sit
amet,
consectetur
adipisici
elit.
It is worth noting that,wordwrapWhen determining line breaks, it mainly relies on spaces to identify "words". This means that if your Chinese text is continuous characters without spaces,wordwrapIt will not automatically wrap lines. It treats a long string of Chinese text without spaces as a 'word' until it encounters the next space or reaches the maximum line limit.
wordcountFilter: A tool for counting the number of words in text
WithwordwrapFocusing on the 'appearance' of text, wordcountPay more attention to the 'inner'——it is used to calculate the number of words contained in a string.This filter is very practical in content operation.wordcountAll can provide direct data support.For SEO optimization, understanding the keyword density in the text or ensuring the article meets a certain word count requirement is also a quick check tool.
wordcountThe same is true for using spaces as word separators to count the number of distinct words in a text. The result is an integer representing the total number of words.
Let's look at a simple example:
{{ "Hello AnQiCMS world"|wordcount }}
This will output:3It recognizes the three words separated by spaces: "Hello", "AnQiCMS", and "world".
It can accurately count even if it is an empty string or combined with other tags.
{{ ""|wordcount }}
{% filter wordcount %}{% lorem 25 w %}{% endfilter %}
The first line will be output.0, because it is an empty string. The second line combined withloremGenerate 25 random words and thenwordcountThe filter counts the number of words included and finally outputs25.
DistinguishwordwrapWithwordcountThe boundary between layout and statistics
Now we can clearly see that, althoughwordwrapandwordcountall of them arewordThey start off similarly, but they serve entirely different purposes.
wordwrapis aText formatting toolIt changes the text layout by inserting a newline character at a specified length, making it more aesthetically pleasing and readable on the page. It is especially suitable for controlling the width of the display area.wordcountis anotherText Statistics ToolIt calculates the number of words in the text, providing quantitative data information to help us with content analysis, evaluate reading volume, or meet specific content requirements.
In simple terms, a tubeLayout style, a tubeData statisticsThey are not exclusive and cannot be substituted for each other, but rather play unique roles in content presentation and management. Use them cleverly.wordwrapandwordcountThese two filters allow us to handle content operation in the Anqi CMS more skillfully, whether it's optimizing the user reading experience or conducting content data analysis, we can achieve twice the result with half the effort.
Common Questions (FAQ)
1.wordwrapCan the filter handle automatic line breaks in Chinese text?
wordwrapThe filter determines the line breaks by identifying spaces in the text.For continuous Chinese text, as there are no spaces between Chinese characters, it treats a whole paragraph of Chinese as a single 'word'. Therefore, default settings cannot achieve automatic line breaks based on character length for Chinese.If you need to truncate Chinese text precisely by character length or wrap lines, you may need to consider combining other processing methods, or looking for filters or methods that specifically support multilingual character handling.
2.wordcountHow does the filter define 'word'?
wordcountThe filter defaults to using spaces as word separators.This means that any sequence of characters separated by spaces will be recognized as an independent 'word'.For example, 'AnQiCMS is a content management system' is counted as 6 words.For continuous non-space characters (regardless of Chinese or English), it considers them as a single word.
3. BesideswordwrapandwordcountWhat are some similar text processing filters in Anqi CMS?
The Anqi CMS provides a rich set of template filters for text processing. AndwordwrapThere are some similar functions but with different focuses.truncatecharsandtruncatewordsThey are used to truncate text by character or by word and add an ellipsis. In addition,linebreaksandlinebreaksbrfilters can convert line breaks in text to HTML's<p>or<br/>Tags, convenient for paragraph display. These filters can be combined flexibly according to your specific needs.