We have moved our forum to GitHub Discussions. For questions about Phalcon v3/v4/v5 you can visit here and for Phalcon v6 here.

Function to truncate strings

Hello,

I'm searching for a built-in function to truncate strings but it doesn't seem to exist if I refer to the Volt documention.

So I was wondering if this kind of function actually exists in another component of the framework, or if not, how to add my own function to the existing Volt filters like nl2br, trim, etc ?



58.4k
Accepted
answer
edited Oct '14

Hey man

You can adding function of php via view, for example

//  Setting up the view component
        $di->set(
            'view',
            function () use ($config) {
                $view = new View();
                $view->setViewsDir($config->application->view->viewsDir);
                $view->disableLevel([View::LEVEL_MAIN_LAYOUT => true, View::LEVEL_LAYOUT => true]);
                //@TODO: move to an extensions/filters/functions file.
                $view->registerEngines(
                    [
                        '.volt' => function () use ($view, $config) {
                                $volt = new Volt($view);
                                $volt->setOptions(
                                    [
                                        'compiledPath'      => $config->application->view->compiledPath,
                                        'compiledSeparator' => $config->application->view->compiledSeparator,
                                        'compiledExtension' => $config->application->view->compiledExtension,
                                        'compileAlways'     => $config->application->debug,
                                    ]
                                );
                                $compiler = $volt->getCompiler();
                                $compiler->addFunction(
                                    't',
                                    function ($string) {
                                        return t($string);
                                    }
                                );
                                $compiler->addFunction('array_key_exists', 'array_key_exists');
                                $compiler->addFilter(
                                    'truncate',
                                    function ($str, $maxLen = 35, $suffix = '...') {
                                        return 'Hovercrowd\Models\Tools::truncate(' . $str . ')';
                                    }
                                );
                                return $volt;
                        }
                    ]
                );

                // Create an event manager
                $eventsManager = new EventsManager();

                // Attach a listener for type 'view'
                $eventsManager->attach(
                    'view',
                    function ($event, $view) {
                        if ($event->getType() == 'notFoundView') {
                            throw new \Exception('View not found!!! (' . $view->getActiveRenderPath() . ')');
                        }
                    }
                );

                // Bind the eventsManager to the view component
                $view->setEventsManager($eventsManager);

                return $view;
            }
        );


1.7k

Very convenient solution. I like this framework more and more :). Thank you for your help !



6.2k

Hello,

Can i ask more?

The code above is add function for volt template.

If i want to use function that is not class::function in php template. What i have to do?

For example: create __($string); function to call $translate->_($string); class->method