*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE) (View: /home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php)"
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
}
*
* @package org.cocur.slugify
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
* @author Marchenko Alexandr
* @copyright 2012-2014 Florian Eckerstorfer
* @license http://www.opensource.org/licenses/MIT The MIT License
*/
interface SlugifyInterface
{
/**
* Return a URL safe version of a string.
*
* @param string $string
* @param string|array|null $options
*
* @return string
*
* @api
*/
public function slugify(string $string, array|string|null $options = null): string;
}
"syntax error, unexpected '|', expecting variable (T_VARIABLE)"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
*
* For the full copyright and license information, please view the LICENSE.md
* file that was distributed with this source code.
*
* ------------------------------------------------------------------
*/
declare(strict_types=1);
namespace TOC;
use Cocur\Slugify\Slugify;
use Cocur\Slugify\SlugifyInterface;
/**
* UniqueSlugify creates slugs from text without repeating the same slug twice per instance
*
* @author Casey McLaughlin <caseyamcl@gmail.com>
*/
class UniqueSlugify implements SlugifyInterface
{
/**
* @var SlugifyInterface
*/
private $slugify;
/**
* @var array
*/
private $used;
/**
* Constructor
*
* @param SlugifyInterface|null $slugify
*/
public function __construct(?SlugifyInterface $slugify = null)
{
$this->used = array();
$this->slugify = $slugify ?: new Slugify();
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/vendor/caseyamcl/toc/src/UniqueSlugify.php"
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
/**
* @var HTML5
*/
private $htmlParser;
/**
* @var SlugifyInterface
*/
private $slugifier;
/**
* Constructor
*
* @param HTML5|null $htmlParser
* @param SlugifyInterface|null $slugify
*/
public function __construct(?HTML5 $htmlParser = null, ?SlugifyInterface $slugify = null)
{
$this->htmlParser = $htmlParser ?? new HTML5();
$this->slugifier = $slugify ?? new UniqueSlugify();
}
/**
* Fix markup
*
* @param string $markup
* @param int $topLevel
* @param int $depth
* @return string Markup with added IDs
* @throws RuntimeException
*/
public function fix(string $markup, int $topLevel = 1, int $depth = 6): string
{
if (! $this->isFullHtmlDocument($markup)) {
$partialID = uniqid('toc_generator_');
$markup = sprintf("<body id='%s'>%s</body>", $partialID, $markup);
}
$domDocument = $this->htmlParser->loadHTML($markup);
$domDocument->preserveWhiteSpace = true; // do not clobber whitespace
<?php
namespace App\View\Composers;
use DOMDocument;
use Roots\Acorn\View\Composer;
class BlogPost extends Composer
{
protected static $views = [
'partials.content-single',
];
public function override()
{
$fields = get_fields();
$htmlContent = apply_filters( 'the_content', get_the_content() );
$markupFixer = new \TOC\MarkupFixer();
$tocGenerator = new \TOC\TocGenerator();
$htmlContent = $markupFixer->fix($htmlContent);
$fields['toc'] = $tocGenerator->getOrderedHtmlMenu($htmlContent);
$fields['the_content'] = $htmlContent;
$fields['the_category'] = $this->getCategory();
return $fields;
}
public function getCategory() {
$category = null;
if(get_the_terms(get_the_id(), 'category')) {
foreach(get_the_terms(get_the_id(), 'category') as $term) {
if($term->name !== "Blog" && $term->name !== "Events" && $term->name !== "News") {
$category = $term;
return $category;
}
}
}
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function with()
{
return [];
}
/**
* Data to be passed to view before rendering
*
* @return array
*/
protected function override()
{
return static::$views;
}
$view = array_slice(explode('\\', static::class), 3);
$view = array_map([Str::class, 'snake'], $view, array_fill(0, count($view), '-'));
return implode('/', $view);
}
/**
* Compose the view before rendering.
*
* @param \Illuminate\View\View $view
* @return void
*/
public function compose(View $view)
{
$this->view = $view;
$this->data = new Fluent($view->getData());
$view->with($this->merge());
}
/**
* Data to be merged and passed to the view before rendering.
*
* @return array
*/
protected function merge()
{
return array_merge(
$this->with(),
$this->view->getData(),
$this->override()
);
}
/**
* Data to be passed to view before rendering
*
* @return array
return $callback;
}
/**
* Build a class based container callback Closure.
*
* @param string $class
* @param string $prefix
* @return \Closure
*/
protected function buildClassEventCallback($class, $prefix)
{
[$class, $method] = $this->parseClassEvent($class, $prefix);
// Once we have the class and method name, we can build the Closure to resolve
// the instance out of the IoC container and call the method on it with the
// given arguments that are passed to the Closure as the composer's data.
return function () use ($class, $method) {
return $this->container->make($class)->{$method}(...func_get_args());
};
}
/**
* Parse a class based composer name.
*
* @param string $class
* @param string $prefix
* @return array
*/
protected function parseClassEvent($class, $prefix)
{
return Str::parseCallback($class, $this->classEventMethodForPrefix($prefix));
}
/**
* Determine the class event method based on the given prefix.
*
* @param string $prefix
* @return string
* @param \Closure|string $listener
* @param bool $wildcard
* @return \Closure
*/
public function makeListener($listener, $wildcard = false)
{
if (is_string($listener)) {
return $this->createClassListener($listener, $wildcard);
}
if (is_array($listener) && isset($listener[0]) && is_string($listener[0])) {
return $this->createClassListener($listener, $wildcard);
}
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return $listener($event, $payload);
}
return $listener(...array_values($payload));
};
}
/**
* Create a class based listener using the IoC container.
*
* @param string $listener
* @param bool $wildcard
* @return \Closure
*/
public function createClassListener($listener, $wildcard = false)
{
return function ($event, $payload) use ($listener, $wildcard) {
if ($wildcard) {
return call_user_func($this->createClassCallable($listener), $event, $payload);
}
$callable = $this->createClassCallable($listener);
return $callable(...array_values($payload));
* @param bool $halt
* @return array|null
*/
public function dispatch($event, $payload = [], $halt = false)
{
// When the given "event" is actually an object we will assume it is an event
// object and use the class as the event name and this event itself as the
// payload to the handler, which makes object based events quite simple.
[$event, $payload] = $this->parseEventAndPayload(
$event, $payload
);
if ($this->shouldBroadcast($payload)) {
$this->broadcastEvent($payload[0]);
}
$responses = [];
foreach ($this->getListeners($event) as $listener) {
$response = $listener($event, $payload);
// If a response is returned from the listener and event halting is enabled
// we will just return this response, and not call the rest of the event
// listeners. Otherwise we will add the response on the response list.
if ($halt && ! is_null($response)) {
return $response;
}
// If a boolean false is returned from a listener, we will stop propagating
// the event to any further listeners down in the chain, else we keep on
// looping through the listeners and firing every one in our sequence.
if ($response === false) {
break;
}
$responses[] = $response;
}
return $halt ? null : $responses;
}
protected function addEventListener($name, $callback)
{
if (Str::contains($name, '*')) {
$callback = function ($name, array $data) use ($callback) {
return $callback($data[0]);
};
}
$this->events->listen($name, $callback);
}
/**
* Call the composer for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callComposer(ViewContract $view)
{
$this->events->dispatch('composing: '.$view->name(), [$view]);
}
/**
* Call the creator for a given view.
*
* @param \Illuminate\Contracts\View\View $view
* @return void
*/
public function callCreator(ViewContract $view)
{
$this->events->dispatch('creating: '.$view->name(), [$view]);
}
}
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<?php $__env->startSection('content'); ?>
<?php while(have_posts()): ?> <?php (the_post()); ?>
<?php echo $__env->first(['partials.content-single-' . get_post_type(), 'partials.content-single'], \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>
<?php endwhile; ?>
<?php $__env->stopSection(); ?>
<?php echo $__env->make('layouts.app', \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?><?php /**PATH /home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/resources/views/single.blade.php ENDPATH**/ ?>
/**
* Get the evaluated contents of the view at the given path.
*
* @param string $__path
* @param array $__data
* @return string
*/
protected function evaluatePath($__path, $__data)
{
$obLevel = ob_get_level();
ob_start();
extract($__data, EXTR_SKIP);
// We'll evaluate the contents of the view inside a try/catch block so we can
// flush out any stray output that might get out before an error occurs or
// an exception is thrown. This prevents any partial views from leaking.
try {
include $__path;
} catch (Throwable $e) {
$this->handleViewException($e, $obLevel);
}
return ltrim(ob_get_clean());
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
while (ob_get_level() > $obLevel) {
ob_end_clean();
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/storage/framework/views/eb422c8beb3d93cfa2fe08ce3b438f23bc0fae21.php"
*
* @param string $path
* @param array $data
* @return string
*/
public function get($path, array $data = [])
{
$this->lastCompiled[] = $path;
// If this given view has expired, which means it has simply been edited since
// it was last compiled, we will re-compile the views so we can evaluate a
// fresh copy of the view. We'll pass the compiler the path of the view.
if ($this->compiler->isExpired($path)) {
$this->compiler->compile($path);
}
// Once we have the path to the compiled file, we will evaluate the paths with
// typical PHP just like any other templates. We also keep a stack of views
// which have been rendered for right exception messages to be generated.
$results = $this->evaluatePath($this->compiler->getCompiledPath($path), $data);
array_pop($this->lastCompiled);
return $results;
}
/**
* Handle a view exception.
*
* @param \Throwable $e
* @param int $obLevel
* @return void
*
* @throws \Throwable
*/
protected function handleViewException(Throwable $e, $obLevel)
{
$e = new ViewException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);
parent::handleViewException($e, $obLevel);
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
* Get the data bound to the view instance.
*
* @return array
*/
public function gatherData()
{
$data = array_merge($this->factory->getShared(), $this->data);
foreach ($data as $key => $value) {
if ($value instanceof Renderable) {
$data[$key] = $value->render();
}
}
return $data;
}
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
*/
protected function renderContents()
{
// We will keep track of the amount of views being rendered so we can flush
// the section after the complete rendering operation is done. This will
// clear out the sections for any separate views that may be rendered.
$this->factory->incrementRender();
$this->factory->callComposer($this);
$contents = $this->getContents();
// Once we've finished rendering the view, we'll decrement the render count
// so that each sections get flushed out next time a view is created and
// no old sections are staying around in the memory of an environment.
$this->factory->decrementRender();
return $contents;
}
/**
* Get the evaluated contents of the view.
*
* @return string
*/
protected function getContents()
{
return $this->engine->get($this->path, $this->gatherData());
}
/**
$this->view = $view;
$this->path = $path;
$this->engine = $engine;
$this->factory = $factory;
$this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
}
/**
* Get the string contents of the view.
*
* @param callable|null $callback
* @return array|string
*
* @throws \Throwable
*/
public function render(callable $callback = null)
{
try {
$contents = $this->renderContents();
$response = isset($callback) ? $callback($this, $contents) : null;
// Once we have the contents of the view, we will flush the sections if we are
// done rendering all views so that there is nothing left hanging over when
// another view gets rendered in the future by the application developer.
$this->factory->flushStateIfDoneRendering();
return ! is_null($response) ? $response : $contents;
} catch (Throwable $e) {
$this->factory->flushState();
throw $e;
}
}
/**
* Get the contents of the view instance.
*
* @return string
<!doctype html>
<html <?php language_attributes(); ?>>
<?php echo \Roots\view(\Roots\app('sage.view'), \Roots\app('sage.data'))->render(); ?>
</html>
}
break;
}
}
if ( ! $template ) {
$template = get_index_template();
}
/**
* Filters the path of the current template before including it.
*
* @since 3.0.0
*
* @param string $template The path of the template to include.
*/
$template = apply_filters( 'template_include', $template );
if ( $template ) {
include $template;
} elseif ( current_user_can( 'switch_themes' ) ) {
$theme = wp_get_theme();
if ( $theme->errors() ) {
wp_die( $theme->errors() );
}
}
return;
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/app/themes/tfs/index.php"
<?php
/**
* Loads the WordPress environment and template.
*
* @package WordPress
*/
if ( ! isset( $wp_did_header ) ) {
$wp_did_header = true;
// Load the WordPress library.
require_once __DIR__ . '/wp-load.php';
// Set up the WordPress query.
wp();
// Load the theme template.
require_once ABSPATH . WPINC . '/template-loader.php';
}
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-includes/template-loader.php"
<?php
/**
* WordPress View Bootstrapper
*/
define('WP_USE_THEMES', true);
require __DIR__ . '/wp/wp-blog-header.php';
"/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/wp/wp-blog-header.php"
Key | Value |
query_vars | array:3 [ "page" => "" "name" => "how-do-actors-cry" "category_name" => "blog" ] |
query_string | "name=how-do-actors-cry&category_name=blog"
|
request | "blog/how-do-actors-cry"
|
matched_rule | "(.+?)/([^/]+)(?:/([0-9]+))?/?$"
|
matched_query | "category_name=blog&name=how-do-actors-cry&page="
|
did_permalink | true
|
Key | Value |
query | array:3 [ "page" => "" "name" => "how-do-actors-cry" "category_name" => "blog" ] |
query_vars | array:66 [ "page" => 0 "name" => "how-do-actors-cry" "category_name" => "blog" "error" => "" "m" => "" "p" => 0 "post_parent" => "" "subpost" => "" "subpost_id" => "" "attachment" => "" "attachment_id" => 0 "pagename" => "" "page_id" => 0 "second" => "" "minute" => "" "hour" => "" "day" => 0 "monthnum" => 0 "year" => 0 "w" => 0 "tag" => "" "cat" => "" "tag_id" => "" "author" => "" "author_name" => "" "feed" => "" "tb" => "" "paged" => 0 "meta_key" => "" "meta_value" => "" "preview" => "" "s" => "" "sentence" => "" "title" => "" "fields" => "" "menu_order" => "" "embed" => "" "category__in" => [] "category__not_in" => [] "category__and" => [] "post__in" => [] "post__not_in" => [] "post_name__in" => [] "tag__in" => [] "tag__not_in" => [] "tag__and" => [] "tag_slug__in" => [] "tag_slug__and" => [] "post_parent__in" => [] "post_parent__not_in" => [] "author__in" => [] "author__not_in" => [] "search_columns" => [] "ignore_sticky_posts" => false "suppress_filters" => false "cache_results" => true "update_post_term_cache" => true "update_menu_item_cache" => false "lazy_load_term_meta" => true "update_post_meta_cache" => true "post_type" => "" "posts_per_page" => 10 "nopaging" => false "comments_per_page" => "50" "no_found_rows" => false "order" => "DESC" ] |
meta_query | WP_Meta_Query {#2559} |
queried_object | WP_Post {#2560} |
queried_object_id | 29444
|
request | """ SELECT wp_posts.*\n \t\t\t\t\t FROM wp_posts \n \t\t\t\t\t WHERE 1=1 AND wp_posts.post_name = 'how-do-actors-cry' AND wp_posts.post_type = 'post'\n \t\t\t\t\t \n \t\t\t\t\t ORDER BY wp_posts.post_date DESC\n \t\t\t\t\t """ |
post_count | 1
|
in_the_loop | true
|
current_comment | -1
|
found_posts | 1
|
is_single | true
|
is_singular | true
|
Key | Value |
ID | 29444
|
post_author | "2"
|
post_date | "2023-02-21 00:00:00"
|
post_date_gmt | "2023-02-21 00:00:00"
|
post_content | """ <img src="https://dev.tfs.staging.poundandgrain.ca/app/uploads/2023/03/danie-franco-7KHCNCddn2U-unsplash-scaled.jpg" alt="how do actors cry?" width="670" height="448" class="alignnone size-medium wp-image-27761" />\n \n </br>\n \n For actors, crying on demand is a critical and highly esteemed skill. Whether you're on stage or on screen, delivering a convincing cry can transform your performance from passable to powerful. There’s also no predicting when a script with the dreaded cue “cries” might land on your lap. \n \n For these reasons, if you're an actor, you should be routinely practicing your ability to turn on the waterworks. Or at the least very least, you should have a few quick solutions you can turn to in a pinch. \n \n In this blog post, we’ll walk you through two approaches to tearing up on cue. \n \n First, we’ll teach you <strong>how to get emotional</strong> and provide you with <strong>five feeling-focused tactics</strong> to help you produce genuine tears. \n \n Next, we’ll highlight <strong>five physical “hacks”</strong> that you can use when emotions alone can’t cut it.\n \n Let’s get started!\n \n \n \n <h1>How to Leverage Emotion to Cry on Command</h1>\n \n When it comes to acting, not all tears are created equal. To achieve an authentic-looking on-screen cry you’ll need to tap deep into your emotions. \n \n The key here, however, is not to simulate crying, but to actually bring yourself to tears and do so in a way that feels natural and real. To do this, we recommend you reframe your approach.\n \n Rather than trying to convince the audience that your tears are truthful, focus on creating a genuinely emotional moment for yourself, irrespective of the viewer. If you can achieve this state of psychological separation, the next step is simple: let it all pour out. \n \n Of course, this is easier said than done. Summoning the feelings necessary to make yourself cry can be an uncomfortable experience. And doing so on command calls for a lot of practice. It also requires a deep understanding of how to effectively harness emotions more generally; you won’t deliver a believable cry until you’ve mastered the portrayal of sadness and anger.\n \n \n <h1>How do actors get emotional?</h1>\n \n \n An actor’s job hinges on their capacity to emote, which is why a quick Google search will reveal countless “tricks” for improving the emotionality of your performance. These range from special breathwork routines to controlled bouts of screaming. \n \n However, if you are really serious about getting emotional on-screen, we recommend that you start with the tried and true and begin studying <strong>Method acting</strong>.\n \n Method acting is rooted in the teaching of Russian actor and director Konstantin Stanislavski, who urged his students to strive for “believable truth” in their performances by drawing from their own true experiences and emotions. \n \n If you're interested in learning more about the mechanics of Method acting, check out these three classic books:\n \n \n \t<p style="padding-left:25px">• <a href="https://www.amazon.com/An-Actors-Work-Students-Diary/dp/041555120X/" rel="noopener" target="_blank">An Actor’s Work: A Student’s Diary</a> by Konstantin Stanislavski/p>\n \n \t<p style="padding-left:25px">• <a href="https://www.amazon.com/Acting-First-Lessons-Theatre-Arts/dp/0878300007/" rel="noopener" target="_blank">Acting: The First Six Lessons</a> by Richard Boleslavsky</p>\n \n \t<p style="padding-left:25px">• <a href="https://www.amazon.com/Strasberg-Actors-Studio-Tape-Recorded-Sessions/dp/1559360224/" rel="noopener" target="_blank">Strasberg at the Actors Studio: Tape-Recorded Sessions</a> edited by Robert H. Hethmon</p>\n \n </br>\n \n <h1>Five Techniques For Triggering Genuine Tears</h1>\n \n So, you’ve rethought your approach to on-screen tears and brushed up on the basics of Method acting. Now you’re ready to start crying on cue – using nothing but feels. Here are five techniques to help you do just that!\n </br>\n <em><strong>Search Your Memory </strong></em>\n \n Straight from Method Acting 101, this technique invites you to draw from your own personal memories; in particular, ones that resonate with you on a deep emotional level. We recommend that you set aside time before your scene to meditate on the details of one specific moment from your past. \n \n Of course, the memory you choose to draw from can be directly aligned with the context of the scene. For example, if the scene requires you to cry due to a breakup, consider reconnecting with a time when you may have experienced heartbreak. \n </br>\n <em><strong>Try the Substitution Method</strong></em>\n \n The “substitution method” involves replacing key characters in a script or scene with real people from your own life. The results of this practice are most effective when you replace key characters with specific friends or family members. \n \n For instance, if a scene calls for your character to cry following the death of their brother from cancer, you can use the substitution method to imagine how it would feel if your real-life brother had been sick and passed away. In doing so, you will likely tap into intense emotions that would otherwise be inaccessible. \n \n <strong>WARNING: </strong>This is a powerful tool that can be incredibly psychologically taxing. It should therefore be used sparingly and with caution. \n </br>\n <strong><em>Explore Trigger Objects</em></strong>\n \n Consider using a “trigger object” to help you tear up. Trigger objects can include any physical item that you feel emotionally connected to, such as a photograph or a piece of jewelry. Bring this item with you to set and while you warm up for your scene try to focus on the specific emotions that it evokes for you. Then really lean into them. \n </br>\n <strong><em>Start Mood Swingin’</em></strong>\n \n Force yourself to “mood swing” in the lead-up to your scene. This method involves oscillating between negative and positive emotions, typically by tapping into both painful and joyous memories. Essentially, the idea here is to get yourself all worked up right before it's time to shoot. \n </br>\n <strong><em>Use Media</em></strong>\n \n Similar to a trigger object, you can also use a sad song, movie scene, book chapter, or YouTube video to trigger your emotions. As with trigger objects, it’s crucial to use this piece of media right before it is time to shoot, this way the feelings it conjures will be fresh and impactful. \n \n \n Need some inspiration? Check out Henry Thomas's iconic tear-filled audition for Steven Spielberg’s E.T.!\n \n </br>\n https://www.youtube.com/watch?v=tA5giyG8E7g\n </br>\n \n <h1>Five Physical Hacks For Crying on Cue</h1>\n \n Every actor should strive to cry using genuine emotion as this will result in the most realistic performance. That being said, working yourself up to a full-fledged weep can be a tough and exhausting endeavour, especially if you are on a tight timeline or need to do multiple takes for a scene. Naturally, that’s where physical tricks come into play. Check out these five below!\n </br>\n <strong><em>Eye Drops and Vaseline</em></strong>\n \n Get yourself some <a href="https://www.amazon.ca/hydraSense-Hydrasense-drops-advanced-milliliter/dp/B07CFGLVJK/ref=sr_1_1_sspa?crid=3QFB9YKOS0YY4&keywords=systane+ultra&qid=1674749373&s=hpc&sprefix=systane+ultra%2Chpc%2C95&sr=1-1-spons&psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUEyVlA2N0IwQVRDS0lRJmVuY3J5cHRlZElkPUEwODAzMjk5MkhPSDVEUEo2VjZORCZlbmNyeXB0ZWRBZElkPUEwNDg2ODE5MU5CMjJDUlo3MEg4UiZ3aWRnZXROYW1lPXNwX2F0ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU=" rel="noopener" target="_blank">lubricant eye drops</a> and a <a href="https://www.amazon.ca/Vaseline-Original-Petroleum-Jelly-375g/dp/B003M5KZRS/ref=sr_1_1_sspa?crid=1O5T8ZOXCR4T6&keywords=vaseline&qid=1674749413&s=hpc&sprefix=vaseline%2Chpc%2C91&sr=1-1-spons&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExODdQR1MzS1UxV0NQJmVuY3J5cHRlZElkPUEwODUzNDIzMTc5MUNEU1NZRzVQTiZlbmNyeXB0ZWRBZElkPUEwODMzOTg3M08wVFlVMDg1WkJVUyZ3aWRnZXROYW1lPXNwX2F0ZiZhY3Rpb249Y2xpY2tSZWRpcmVjdCZkb05vdExvZ0NsaWNrPXRydWU&th=1" rel="noopener" target="_blank">tub of petroleum jelly</a>. Rub a thin layer of petroleum jelly on your bottom eyelids and just under both eyes. This will give them a wet and glazy look, creating the impression that you have just undergone a heavy bout of crying. Then, when it’s time to roll camera, place two to three eye drops in the inside corner of both your eyes. Squeeze your eyes shut, blink a few times, and voila! Automatic tears!\n </br>\n <strong><em>Menthol Stick</em></strong>\n \n Another method for manufacturing tears comes in the form of menthol sticks. A menthol stick is a small cylindrical tube that carries a menthol crystal. Similar to a tube of lipstick, the menthol stick can be unwound and “rolled” onto the skin. In this case, you’d apply the menthol stick directly under your eyes. The menthol crystal will create a cooling sensation that will stimulate your tear glands and cause mild eye irritation. The result? An effortless flow of authentic-looking tears. \n \n If you’re shopping for a menthol stick, two popular options to consider include <a href="https://www.amazon.ca/Narrative-Cosmetics-Menthol-Infused-Theater/dp/B07QDQSY58/ref=sr_1_1?crid=26CWGZPB0OTOI&keywords=Narrative+Cosmetic%E2%80%99s+Tear+Stick&qid=1674749602&s=hpc&sprefix=narrative+cosmetic+s+tear+stick%2Chpc%2C98&sr=1-1" rel="noopener" target="_blank">Narrative Cosmetic’s Tear Stick</a> and <a href="https://us.kryolan.com/product/tear-stick" rel="noopener" target="_blank">Krylon’s Menthol Tear Stick</a>. \n \n </br>\n https://www.tiktok.com/@seandreww/video/7155632933213211950\n <br>\n \n <em><strong>Tear Blower </strong></em>\n \n A cousin to the classic menthol stick, the tear blower is a useful device designed to create a direct stream of air that can be pointed at your eye. Similar to menthol sticks, most brand-name tear blowers feature menthol crystals to help automatically trigger tears. \n \n The advantage of a tear blower is that they do not require you to physically rub anything onto your skin, which can be a problem if you're wearing makeup. Their downside? They require a second person to do the blowing. \n \n Some popular options include the <a href="https://www.amazon.ca/Kryolan-3000-Menthol-Creates-Immediate/dp/B01BX88WH0" rel="noopener" target="_blank">Krylon 3000 Tear Blower</a> and <a href="https://www.nigelbeauty.com/p-21332-menthol-tear-blower.aspx" rel="noopener" target="_blank">Nigel Beauty’s Menthol Tear Blower</a>. Both products are created by makeup brands specializing in film and fashion cosmetics. \n </br>\n <em><strong>Staring Method</strong></em>\n \n The “staring method” is a cheap and simple technique to help you fake cry on camera. This method simply requires that you keep your eyes open for as long as possible without blinking while also focusing on a single point far off in the distance. Doing this will strain your eyes, which should lead to the production of tears.\n </br>\n <em><strong>Yawning Method</strong></em>\n \n A final option to consider is the “yawning method,” which requires you to self-trigger a yawn in order to generate tears. Although this sounds relatively simple, it requires a surprising amount of technique to be effective. \n \n For example, in this popular Reddit post, holycrapitslissa outlines how to achieve a tear-inducing yawn:\n \n \t<p style="padding-left:25px">• Take a deep breath and slowly exhale while faking a yawn</p>\n \n \t<p style="padding-left:25px">• Keep your lips pursed tight the entire time </p>\n \n \t<p style="padding-left:25px">• Focus the yawn in the back of your throat, “like you're trying to swallow your sadness.” </p>\n </br>\n \n https://www.tiktok.com/@niatheactress/video/7151872481639419182?q=acting%20yawn%20method&t=1674750654848\n \n \n <h1>Now You're Ready to Cry on Cue!</h1>\n \n Crying on cue is a difficult skill to master. But with enough practice, it can be done. \n \n First and foremost, learn how to tap into your emotions and avoid the temptation to simulate sobbing. Draw from emotionally-heavy memories, utilize trigger objects, and study Method acting. Use whatever emotive tools necessary to work yourself up into a genuine and believable cry. \n \n Next, be sure to have a few physical “hacks” up your sleeve in case getting emotional falls flat. Invest in a menthol stick, learn to yawn the right way, and when in doubt, bust out the eye drops. \n \n That’s it! Now get practicing!\n \n <strong>P.S:</strong> If you’re interested in becoming an actor you should consider <a href="https://create.torontofilmschool.ca/newsletter/" rel="noopener" target="_blank">signing up for Toronto Film School’s industry-focused newsletter, Insider Advantage</a>. \n \n Packed with exclusive content and useful industry insights, Insider Advantage is essential reading for anyone looking to make their mark in the world of film and television. """ |
post_title | "How Do Actors Cry? The Secret To Triggering On-Screen Tears"
|
post_excerpt | "" |
post_status | "publish"
|
comment_status | "closed"
|
ping_status | "closed"
|
post_password | "" |
post_name | "how-do-actors-cry"
|
to_ping | "" |
pinged | "" |
post_modified | "2023-03-27 21:06:47"
|
post_modified_gmt | "2023-03-27 21:06:47"
|
post_content_filtered | "" |
post_parent | 0
|
guid | "https://dev.tfs.staging.poundandgrain.ca/how-do-actors-cry-2/"
|
menu_order | 0
|
post_type | "post"
|
post_mime_type | "" |
comment_count | "0"
|
filter | "raw"
|
Key | Value |
SERVER_SOFTWARE | "nginx/1.22.1"
|
REQUEST_URI | "/blog/how-do-actors-cry/"
|
USER | "forge"
|
HOME | "/home/forge"
|
HTTP_REFERER | "https://dev.tfs.staging.poundandgrain.ca/blog/how-do-actors-cry"
|
HTTP_ACCEPT_ENCODING | "gzip, br, zstd, deflate"
|
HTTP_USER_AGENT | "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
|
HTTP_ACCEPT | "*/*"
|
HTTP_HOST | "dev.tfs.staging.poundandgrain.ca"
|
REDIRECT_STATUS | "200"
|
HTTPS | "on"
|
SERVER_NAME | "dev.tfs.staging.poundandgrain.ca"
|
SERVER_PORT | "443"
|
SERVER_ADDR | "10.0.1.187"
|
REMOTE_PORT | "1687"
|
REMOTE_ADDR | "3.135.188.211"
|
GATEWAY_INTERFACE | "CGI/1.1"
|
SERVER_PROTOCOL | "HTTP/2.0"
|
DOCUMENT_ROOT | "/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web"
|
DOCUMENT_URI | "/index.php"
|
SCRIPT_NAME | "/index.php"
|
SCRIPT_FILENAME | "/home/forge/dev.tfs.staging.poundandgrain.ca/releases/20241113033749/web/index.php"
|
CONTENT_LENGTH | "" |
CONTENT_TYPE | "" |
REQUEST_METHOD | "GET"
|
QUERY_STRING | "" |
FCGI_ROLE | "RESPONDER"
|
PHP_SELF | "/index.php"
|
REQUEST_TIME_FLOAT | 1731831910.4789
|
REQUEST_TIME | 1731831910
|
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|
Key | Value |
DB_NAME | "tfs_dev"
|
DB_USER | "***"
|
DB_PASSWORD | "************"
|
WP_ENV | "development"
|
WP_HOME | "https://dev.tfs.staging.poundandgrain.ca"
|
WP_SITEURL | "https://dev.tfs.staging.poundandgrain.ca/wp"
|
WP_DEBUG_LOG | "/path/to/debug.log"
|
AUTH_KEY | "****************************************************************"
|
SECURE_AUTH_KEY | "****************************************************************"
|
LOGGED_IN_KEY | "****************************************************************"
|
NONCE_KEY | "****************************************************************"
|
AUTH_SALT | "****************************************************************"
|
SECURE_AUTH_SALT | "****************************************************************"
|
LOGGED_IN_SALT | "****************************************************************"
|
NONCE_SALT | "****************************************************************"
|
ACF_PRO_KEY | "b3JkZXJfaWQ9NDQxMjV8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE0LTExLTEyIDA2OjA0OjE3"
|